在链表中插入节点

Insertion of node in a linked list

我的大学教授给了我们下面的代码,但我觉得倒数第三行应该是

temp -> next = curr -> next -> next

如果我错了为什么它是正确的?

!!注意,新节点要放在链表的中间,不能放在边上!!


void insert_list (struct node *head, int pos) {
    int k;
    struct node *temp, *curr;
    curr = ihead;
    for (k=1; k<pos; k++)
       curr = curr -> next;
    temp = (struct node *) malloc (sizeof (struct node));
    temp -> next = NULL;
    gets (temp -> student);
    scanf ("%d", &temp -> am);
    temp -> next = curr -> next;
    curr -> next = temp;
}

如果您有元素 A B C D 并且在 B 和 C 之间插入 X,则:

开头:

  • B 会是 curr
  • C 将是 curr->next
  • D 会是 curr->next->next

你的函数之后:

  • B 仍然是 curr
  • X 将是 curr->nexttemp
  • C 将是 temp->nextcurr->next->next
  • D 将是 temp->next->nextcurr->next->next->next

从而得到链表:A B X C D.

如果你使用curr->next->nextX->next会指向D,你会在这个过程中失去C。