用C语言编写逆置带头结点的单链表L详细。
时间: 2024-09-22 10:06:00 浏览: 40
在C语言中,逆置一个带头结点的单链表通常涉及到三个步骤:遍历链表、交换节点指针以及更新头结点的指向。
首先,我们需要创建一个临时变量temp,用于存储当前节点的下一个节点的地址。然后,我们将当前节点的next指针指向temp保存的节点,接着将temp的值设为当前节点,移动到下一个节点。这个过程一直持续到链表的末尾,最后需要更新头结点的next指针,使其指向原来的第二个节点,因为现在第一个节点变成了原尾部。
以下是逆置链表的伪代码示例:
```c
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode *prev = NULL, *current = head, *next = NULL;
// 遍历链表,记录节点并交换指针
while (current != NULL) {
next = current->next;
current->next = prev; // 将当前节点的next指向前一个节点
prev = current; // 更新前一个节点为当前节点
current = next; // 移动到下一个节点
}
// 如果链表非空,则新的头结点是原尾部
if (prev != NULL)
head = prev;
return head;
}
```
相关问题
用c语言编写实现带头结点单链表就地逆置的成员函数
以下是一个用C语言编写的带头结点单链表就地逆置的成员函数:
```c
void reverseList(Node *head)
{
if (head == NULL || head->next == NULL) {
return;
}
Node *prev = NULL;
Node *curr = head->next;
Node *next = NULL;
while (curr != NULL) {
next = curr->next; // 保存下一个节点
curr->next = prev; // 反转当前节点
prev = curr; // 移动prev指针
curr = next; // 移动curr指针
}
head->next = prev; // 将头节点指向反转后的链表头
}
```
该函数首先判断链表是否为空或只有一个节点,如果是,则直接返回。接着,定义三个指针prev、curr和next,分别指向当前节点的前一个节点、当前节点和下一个节点。然后,从头节点的下一个节点开始遍历链表,将当前节点指向前一个节点,然后移动prev、curr和next指针。最后,将头节点指向反转后的链表头。
用c语言编写实现带头结点单链表就地逆置的成员函数并编写主函数测试结果
```
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node, *LinkedList;
LinkedList createLinkedList() {
LinkedList L = (LinkedList)malloc(sizeof(Node));
L->next = NULL;
return L;
}
void insertNode(LinkedList L, int data) {
Node *p = (Node*)malloc(sizeof(Node));
p->data = data;
p->next = L->next;
L->next = p;
}
void printLinkedList(LinkedList L) {
Node *p = L->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void reverseLinkedList(LinkedList L) {
Node *p = L->next;
L->next = NULL;
while (p != NULL) {
Node *q = p->next;
p->next = L->next;
L->next = p;
p = q;
}
}
int main() {
LinkedList L = createLinkedList();
insertNode(L, 3);
insertNode(L, 2);
insertNode(L, 1);
printf("Original list: ");
printLinkedList(L);
reverseLinkedList(L);
printf("Reverse list: ");
printLinkedList(L);
return 0;
}
```
输出结果:
```
Original list: 1 2 3
Reverse list: 3 2 1
```
阅读全文