试图理解这个链表插入代码

Posted

技术标签:

【中文标题】试图理解这个链表插入代码【英文标题】:trying to understand this linkedlist insertion code 【发布时间】:2015-05-04 20:53:47 【问题描述】:

我有这个代码

struct Node 
   int data;
   struct *Node next;
;

struct Node *head;

void insert(int x) 
    node* temp = (node*)malloc(sizeof(struct node));
    temp->data = x;
    temp->next = head;
    head = temp;


int main()

     head = NULL;

我正在关注这个video,看起来代码有效。不过我很难把它放在一起。

我们有一个节点头,它在 main 方法中最初设置为 NULL。

linkedlist 包含一个 int 和 next。此插入代码将数据设置为 int 并位于 head 旁边。然后它设置头部温度。

由于我们将 temp.next 设置为 head 然后 head = temp ,这难道不会让 head 得到 int ,然后让它一遍又一遍地指向自己吗?

到目前为止,我只对 linkedlist 进行了迭代,其中最后一个 next 为 NULL。

【问题讨论】:

【参考方案1】:

此代码在链表的开头插入一个项目 - 它创建一个新节点,设置其数据,并使其next 指向当前head

【讨论】:

【参考方案2】:

没有。

node* temp = malloc(sizeof(struct node));
temp->data = x;

我们有一个新节点,并且已经设置了它的值。

temp->next = head;

head(如果有)将出现在列表中的此元素之后。这意味着这应该是我们的新head

head = temp;

现在就是这样。

如果 headNULL,则此列表没有 next 条目,正如预期的那样。

如果head 不是NULL,则此节点是新的头,它的next 指向列表中的第二个 元素(旧的head)。

【讨论】:

以上是关于试图理解这个链表插入代码的主要内容,如果未能解决你的问题,请参考以下文章

在链表中插入

双向链表在循环python中某个节点结束后插入

NetBSD Make源代码阅读三:链表之插入查找删除与对每个节点应用函数

LeetCode147.对链表进行插入排序(Python)

双向链表插入分段错误 - C

LeetCode147.对链表进行插入排序(Python)