復制鏈表的一種常見方法是遍歷原鏈表,創建一個新節點,并將原鏈表節點的值復制到新節點中,然后將新節點連接到新鏈表中。具體步驟如下:
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;
}
使用該方法可以復制一個鏈表并返回新鏈表的頭節點。