复制链表的一种常见方法是遍历原链表,创建一个新节点,并将原链表节点的值复制到新节点中,然后将新节点连接到新链表中。具体步骤如下:
- 创建一个指向原链表头节点的指针
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#include 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; }
使用该方法可以复制一个链表并返回新链表的头节点。