head->next=p;和head=p->next的区别
时间: 2024-06-01 15:08:03 浏览: 93
这两行代码的区别在于它们改变了链表中节点的连接方式。
假设有一个链表,其中head是头节点的指针,p是一个新的节点指针。
- head->next = p 将新节点p插入到头节点head之后,使得新节点p成为新的头节点的下一个节点。
- head = p->next 将头节点head指向p的下一个节点,也就是将p节点从链表中删除,并将链表的头节点指向p的下一个节点。
因此,这两个语句的效果完全不同,需要根据实际情况来选择使用哪个语句。
相关问题
Node*p = head->next
`Node* p = head->next`表示将指针`p`初始化为链表中第二个结点的指针,而不是第一个结点。因为链表中第一个结点通常为头结点,不存储实际数据,而是用于指向第一个实际数据结点。如果要从第一个实际数据结点开始遍历链表,可以将指针`p`初始化为`head->next`,然后进行循环,例如:
```
Node* p = head->next; // head为链表的头指针
while (p != NULL) {
// 处理当前结点
// ...
p = p->next; // 移动到下一个结点
}
```
在这个代码中,指针`p`指向第一个实际数据结点,然后进行循环,直到遍历完整个链表。需要注意的是,在移动指针时要判断指针是否为空,否则会导致程序崩溃。
while(q!=NULL) { p->next=q->next; q->next=head;; head=q; q=p->next; } 这一段什么具体什么意思
这段代码是一个链表反转的实现。具体的意思是,通过一个while循环,将链表中的节点逐个反转。循环条件是当当前节点q不为空时,执行以下操作:
1. 将当前节点p的下一个节点指向q的下一个节点,即将p->next=q->next;
2. 将节点q的下一个节点指向头节点head,即将q->next=head;
3. 将头节点head指向当前节点q,即将head=q;
4. 将当前节点q更新为p的下一个节点,即将q=p->next。
这样循环执行下去,就可以将整个链表反转。