风在归途 2024-03-25 20:48 采纳率: 66.7%
浏览 2
已结题

问题:创建链表函数的形参为什么使用二重指针(相关搜索:结构体|头指针)

State createLink(Node** head),其中Node是结点结构体,函数返回建立的链表的头指针。问题:创建链表函数的形参为什么使用二重指针?

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-25 20:48
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    使用二重指针是为了能够修改传入的头指针,从而使其指向新创建的链表。如果使用单重指针,则只能修改该指针指向的结构体中的指针,而无法修改原头指针的指向。 例如,假设原本有一个链表,其头指针为`head`,现在需要创建一个新的链表并将新链表的头指针赋值给`head`,则需要使用二重指针:
    typedef struct Node {
        int data;
        struct Node* next;
    }Node;
    Node* createLink(Node** head) {
        Node* newNode = NULL;
        Node* tail = NULL;
        int data = 0;
        // 读入新链表结点值,直到用户输入 -1
        printf("请输入新链表结点值(-1 结束):");
        scanf_s("%d", &data);
        while (data != -1) {
            // 新建结点并为其赋值
            newNode = (Node*)malloc(sizeof(Node));
            newNode->data = data;
            newNode->next = NULL;
            if (*head == NULL) {
                *head = newNode;
                tail = newNode;
            }
            else {
                tail->next = newNode;
                tail = newNode;
            }
            printf("请输入新链表结点值(-1 结束):");
            scanf_s("%d", &data);
        }
        return *head;
    }
    int main() {
        Node* head = NULL;  // 原链表头指针
        Node* newHead = NULL; // 新链表头指针
        // 创建新链表并将其头指针赋值给原链表的头指针
        newHead = createLink(&head);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月3日
  • 已采纳回答 3月26日
  • 创建了问题 3月25日

悬赏问题

  • ¥15 plus模型贡献度为nan
  • ¥25 使用cube ai 导入onnx模型时报错
  • ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
  • ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
  • ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
  • ¥15 使用华为ENSP软件模拟实现该实验拓扑
  • ¥15 通过程序读取主板上报税口的数据
  • ¥15 matlab修改为并行
  • ¥15 尝试访问%1服务的windows注册表时遇到问题。必须先解决此问题,然后才能运行安装过程。(请确认您正在使用管理员权限运行)373
  • ¥15 (关键词-运算放大器)