将链表复制到另一个链表 - 迭代 - C - 理解返回的列表

时间:2015-05-27 19:12:04

标签: c algorithm linked-list

尝试链接列表问题,今天我正在尝试“给出一个链表,将其复制到另一个链表”

为了反复这样做,

逻辑是 - 使用三个指针 - current,newList,newTail。

memory_order_seq_cst跟踪给定原始列表中的当前节点

current跟踪我要复制到的列表的 head

newList跟踪我正在复制的列表的 tail

  • 当新列表为空时,创建一个新节点并复制头部,始终将Tail指向最后一个节点。

为此,我的副本列表函数应该>应该是这样的 -

tail

我的问题是: 如果我struct node* CopyList(struct node* head) { struct node* current = head; // used to iterate over the original list struct node* newList = NULL; // head of the new list struct node* tail = NULL; // kept pointing to the last node in the new list while (current != NULL) { if (newList == NULL) { // special case for the first new node newList = malloc(sizeof(struct node)); newList->data = current->data; newList->next = NULL; tail = newList; } else { tail->next = malloc(sizeof(struct node)); tail = tail->next; tail->data = current->data; tail->next = NULL; } current = current->next; } return(newList); } ,我将只有一个节点,不是吗? 因为如果新列表不为空,我前进return(newList),我不应该返回Tail而不是Tail吗?

1 个答案:

答案 0 :(得分:3)

当您添加列表newList中的第一个元素且tail指向同一地址(tail = newList)时。

每次添加其他元素时,请在tail之后添加,然后将其移至下一个位置(tail = tail->next)。也就是说,当您添加第二个元素时,tail newList现在将为newList->next

这样,您可以返回newList并让所有指针指向列表中的下一个元素。