2、设计一算法,逆置带头结点的动态链表 L。要求利用原表的结点空间,并要求用尽可 能少的时间完成,用C语言
时间: 2024-09-18 14:18:45 浏览: 60
为了逆置一个带头结点的动态链表L,可以采用迭代的方式,通过三个指针来操作:两个指针分别指向当前节点和它的前一个节点,而第三个指针则指向新的头节点。以下是C语言的一个简单算法:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
// 如果链表为空或只有一个元素,直接返回
Node* reverseList(Node* head) {
if (head == NULL || head->next == NULL) {
return head;
}
// 定义新头节点
Node* newHead = head->next;
Node* current = head;
Node* prev = NULL; // 初始化前一个节点
// 反转过程
while (current != NULL) {
// 保存当前节点的下一个节点
Node* nextTemp = current->next;
// 将当前节点连接到前一个节点之后
current->next = prev;
// 更新前一个节点和当前节点
prev = current;
current = nextTemp;
}
// 新的头节点变为原来的第二个节点
head = newHead;
return head;
}
阅读全文