编写C中复制链表的功能

编写C中复制链表的功能,第1张

概述我需要实现一个名为copyList的辅助功能,它具有一个参数,一个指向ListNode的指针.此函数需要返回指向原始链接列表副本的第一个节点的指针.换句话说,换句话说,我需要在C中编写一个函数,该函数接收一个链表的头节点,并复制整个链表,返回一个指针到新的头节点.我需要帮助实现这个功能,这是我现在所拥有的. Listnode *SortedList::copyList(Listnode *L) { 我需要实现一个名为copyList的辅助功能,它具有一个参数,一个指向ListNode的指针.此函数需要返回指向原始链接列表副本的第一个节点的指针.换句话说,换句话说,我需要在C中编写一个函数,该函数接收一个链表的头节点,并复制整个链表,返回一个指针到新的头节点.我需要帮助实现这个功能,这是我现在所拥有的.
Listnode *SortedList::copyList(Listnode *L) {    Listnode *current = L;  //holds the current node    Listnode *copy = new Listnode;    copy->next = NulL;    //traverses the List    while (current != NulL) {       *(copy->student) = *(current->student);       *(copy->next) = *(current->next);        copy = copy->next;        current = current->next;    }    return copy;}

此外,这是我正在使用的Listnode结构:

struct Listnode {      Student *student;  Listnode *next;};

注意:使用此函数的另一个因素是将指针返回到局部变量的想法.

解决方法 你需要问自己的第一个问题是复制语义是什么.特别是,您正在使用Student *作为节点内容.复制节点内容是什么意思?我们应该复制指针,以便这两个列表将指向(共享)相同的学生实例,还是应该执行一个 deep copy?
struct Listnode {      Student *student; // a pointer?  shouldn't this be a `Student` object?  Listnode *next;};

您应该问自己的下一个问题是如何为第二个列表分配节点.目前,您只能在副本中分配1个节点.

我想你的代码应该更像:

Listnode *SortedList::copyList(Listnode *L) {    Listnode *current = L;    // Assume the List contains at least 1 student.    Listnode *copy = new Listnode;    copy->student = new Student(*current->student);    copy->next = NulL;    // Keep track of first element of the copy.    Listnode *const head = copy;    // 1st element already copIEd.    current = current->next;    while (current != NulL) {       // Allocate the next node and advance `copy` to the element being copIEd.       copy = copy->next = new Listnode;       // copy the node contents; don't share references to students.       copy->student = new Student(*current->student);       // No next element (yet).       copy->next = NulL;       // Advance 'current' to the next element       current = current->next;    }    // Return pointer to first (not last) element.    return head;}

如果您喜欢在两个列表之间共享学生实例,可以使用

copy->student = current->student;

代替

copy->student = new Student(*current->student);
总结

以上是内存溢出为你收集整理的编写C中复制链表的功能全部内容,希望文章能够帮你解决编写C中复制链表的功能所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234521.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存