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



尝试解决链表问题,今天我尝试"给定一个链表,将其复制到另一个链表"

要迭代地执行此操作,

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

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

newList来跟踪我复制到的列表的

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而不是newList吗?

当你在列表中添加第一个元素newListtail指向相同的地址(tail = newList)。

每次添加另一个元素时,将其添加到tail之后,然后将其移动到下一个位置(tail = tail->next)。也就是说,当你添加第二个元素时,tailnewList变成了newList->next

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

相关内容

  • 没有找到相关文章

最新更新