温馨提示×

C语言链表复制的方法是什么

小亿
117
2023-11-22 15:01:40
栏目: 编程语言

复制链表的一种常见方法是遍历原链表,创建一个新节点,并将原链表节点的值复制到新节点中,然后将新节点连接到新链表中。具体步骤如下:

  1. 创建一个指向原链表头节点的指针p
  2. 创建一个新链表的头节点newHead和尾节点newTail,并将它们初始化为NULL
  3. 使用循环遍历原链表,直到p指向NULL
    • 在每次循环中,创建一个新节点newNode,并将原链表节点p的值复制到newNode中。
    • newNodenext指针指向NULL
    • 如果newTailNULL,则将newNode设置为新链表的头节点newHead,并将newTail指向newNode
    • 否则,将newNode连接到新链表的尾部,即将newTailnext指针指向newNode,并更新newTailnewNode
    • p指向下一个节点,即p指向pnext
  4. 返回新链表的头节点newHead

下面是使用C语言实现的示例代码:

#include <stdio.h>
#include <stdlib.h>

struct ListNode {
    int val;
    struct ListNode *next;
};

struct ListNode* copyList(struct ListNode* head) {
    struct ListNode *p = head;
    struct ListNode *newHead = NULL;
    struct ListNode *newTail = NULL;

    while (p != NULL) {
        struct ListNode *newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
        newNode->val = p->val;
        newNode->next = NULL;

        if (newTail == NULL) {
            newHead = newNode;
            newTail = newNode;
        } else {
            newTail->next = newNode;
            newTail = newNode;
        }

        p = p->next;
    }

    return newHead;
}

使用该方法可以复制一个链表并返回新链表的头节点。

0