将一个带头结点的数据域依次为al,a2,•…,an(n≥3)的单链表的所有结点逆置,即第一个 结点的数据域变为an,⋯,最后一个结点的数据域为al。用c语言编程实现以上功能要求。
时间: 2024-03-07 22:49:20 浏览: 52
以下是使用 C 语言实现将单链表逆置的代码。假设链表的头结点为 `head`,每个结点的数据域为 `data`,指向下一个结点的指针为 `next`。
```c
void reverse_list(Node *head) {
if (head == NULL || head->next == NULL || head->next->next == NULL) {
// 链表为空或只有一个结点,无需逆置
return;
}
Node *prev = head->next;
Node *cur = head->next->next;
while (cur != NULL) {
Node *next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
head->next->next = NULL; // 原链表的最后一个结点的指针要指向 NULL
head->next = prev; // 头结点的指针要指向逆置后的第一个结点
}
```
该函数的实现思路为:定义两个指针 `prev` 和 `cur`,分别指向链表的第一个结点和第二个结点,然后从第二个结点开始依次将每个结点的指针指向前一个结点,直到遍历到链表的最后一个结点。最后,将原链表的最后一个结点的指针指向 NULL,头结点的指针指向逆置后的第一个结点。
需要注意的是,为了避免链表为空或只有一个结点的情况,需要在函数中做出判断。
阅读全文