在链表中插入节点
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->next
和 temp
- C 将是
temp->next
和 curr->next->next
- D 将是
temp->next->next
和 curr->next->next->next
从而得到链表:A B X C D
.
如果你使用curr->next->next
,X->next
会指向D,你会在这个过程中失去C。
我的大学教授给了我们下面的代码,但我觉得倒数第三行应该是
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->next
和temp
- C 将是
temp->next
和curr->next->next
- D 将是
temp->next->next
和curr->next->next->next
从而得到链表:A B X C D
.
如果你使用curr->next->next
,X->next
会指向D,你会在这个过程中失去C。