void reverse (LinkList L) { //逆置L指针所指向的单链表
时间: 2023-06-19 19:03:07 浏览: 123
这是一个 C 语言函数,用于将单链表 L 中的元素逆序排列。函数定义中的参数 L 是一个指向单链表结构体的指针。函数实现如下:
```
void reverse(LinkList L) {
ListNode* prev = NULL; // 前驱节点
ListNode* curr = L->head; // 当前节点
ListNode* next = NULL; // 后继节点
// 遍历单链表,依次将每个节点的 next 指针指向前驱节点
while (curr != NULL) {
next = curr->next; // 先记录当前节点的后继节点
curr->next = prev; // 将当前节点的 next 指针指向前驱节点
prev = curr; // 更新前驱节点为当前节点
curr = next; // 更新当前节点为后继节点
}
L->head = prev; // 最后将头指针指向最后一个节点(原链表的尾节点)
}
```
这个函数使用了三个指针来遍历单链表,依次将每个节点的 next 指针指向前驱节点。最后将头指针指向原链表的尾节点。这样就达到了逆置单链表的效果。
相关问题
void Reverse_L(LinkList &L) {//逆置带头结点的单链表L /**************begin************/ /**************end************/ }
可以使用三个指针pre、p和q,将p所指的节点插入到pre和q之间,然后指针p、pre和q分别向后移动,重复这个过程直到链表逆置完成。代码如下:
```
void Reverse_L(LinkList &L) {
if (L == NULL || L->next == NULL) {
return;
}
ListNode *pre = L->next;
ListNode *p = pre->next;
while (p != NULL) {
ListNode *q = p->next;
p->next = pre;
pre = p;
p = q;
}
L->next->next = NULL;
L->next = pre;
}
```
编写算法reverse(linklist &l),要求借助于栈将一个带头结点的单链表l逆置。其中栈的初始化操作、入栈操作和出栈操作算法名分别为initstack(&s)、push(&s,e)、pop(
& s, e)。
算法如下:
1. 初始化一个栈s,将头结点后面的所有节点依次入栈。
2. 从栈中依次出栈所有节点,并将它们依次插入到头结点后面。
3. 将头结点的next指针指向第一个节点,完成逆置。
具体实现代码如下:
void reverse(linklist &l){
stack<node*> s; // 定义一个存放节点指针的栈
node* p = l->next; // p指向第一个节点
while(p != NULL){ // 将所有节点入栈
s.push(p);
p = p->next;
}
p = l; // p重新指向头结点
while(!s.empty()){ // 依次出栈并插入到头结点后面
node* q = s.top();
s.pop();
p->next = q;
p = q;
}
p->next = NULL; // 最后一个节点的next指针置为NULL
}