将一个带头结点的数据域依次为 a1,a2,…,an(n≥3)的单链表的所有结点逆置, 即第一个结点的数据域变为 an,…,最后一个结点的数据域为 a1。用C语言编程实现以上功能要求。
时间: 2024-03-05 20:48:29 浏览: 64
写一个算法将一单链表逆置。要求操作在原链表上进行。
可以使用三个指针分别指向当前遍历到的结点、该结点的前驱结点和该结点的后继结点,然后依次将当前结点的 next 指针指向前驱结点,然后将三个指针向后移动一个结点,循环直到遍历完整个链表。最后将原来的头结点指向新的尾结点即可。
下面是具体的代码实现:
```
void reverseList(Node* head) {
if(head == NULL || head->next == NULL) {
return;
}
Node *prev = NULL, *cur = head->next, *next = cur->next;
while(next != NULL) {
cur->next = prev;
prev = cur;
cur = next;
next = next->next;
}
cur->next = prev;
head->next = cur;
}
```
其中,Node 表示链表的结构体,包含数据域和指向下一个结点的指针 next。head 表示头结点,head->next 指向第一个数据结点。
阅读全文