复制链表的一种常见方法是遍历原链表,创建一个新节点,并将原链表节点的值复制到新节点中,然后将新节点连接到新链表中。具体步骤如下:
创建一个指向原链表头节点的指针p。创建一个新链表的头节点newHead和尾节点newTail,并将它们初始化为NULL。使用循环遍历原链表,直到p指向NULL:在每次循环中,创建一个新节点newNode,并将原链表节点p的值复制到newNode中。将newNode的next指针指向NULL。如果newTail为NULL,则将newNode设置为新链表的头节点newHead,并将newTail指向newNode。否则,将newNode连接到新链表的尾部,即将newTail的next指针指向newNode,并更新newTail为newNode。将p指向下一个节点,即p指向p的next。返回新链表的头节点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;}使用该方法可以复制一个链表并返回新链表的头节点。

