试写出一个采用单链表存储的线性表的数据元素逆置的算法
时间: 2023-05-22 17:04:30 AIGC 浏览: 351
可以采用遍历链表的方式,依次将每个结点的指针指向其前驱结点,从而实现链表的逆置。具体实现如下:
1. 定义一个指向链表头结点的指针p,并将其初始化为头结点的下一个结点p->next;
2. 定义3个指针pre、cur、nex,其中pre指向NULL,cur指向p,nex指向cur的下一个结点;
3. 依次遍历链表的每个结点,将cur的指针指向pre,然后pre、cur、nex向后滑动一个结点,直到nex指向NULL为止;
4. 将p指向链表的最后一个结点。
逆置代码如下:
void reverse(LinkList &L) {
if(!L || !L->next) {
return;
}
LinkList p = L->next, pre = NULL, cur = p, nex = p->next;
while(nex) {
cur->next = pre;
pre = cur;
cur = nex;
nex = nex->next;
}
cur->next = pre;
L->next = cur;
}
注意:此代码仅适用于采用头结点的单链表存储结构,如果未采用头结点,需对代码进行相应修改。
相关问题
写出一个采用单链表存储的线性表A的数据元素逆置的算法
可以使用头插法,从原链表的头节点开始,依次将每个节点插入到新链表的头部,最终得到逆置后的链表。具体实现代码如下:
void reverseList(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return;
}
ListNode* newHead = nullptr;
ListNode* cur = head;
while (cur != nullptr) {
ListNode* next = cur->next;
cur->next = newHead;
newHead = cur;
cur = next;
}
head = newHead;
}
试写出一个采用单链表存储的线性表A(A带表头结点 Head)的数据元素逆置的算法。
可以使用三个指针,分别指向当前节点、前一个节点和后一个节点,依次遍历链表并将当前节点的指针指向前一个节点,直到遍历完整个链表。具体实现如下:
void ReverseList(ListNode* Head) {
if (Head == NULL || Head->next == NULL) {
return;
}
ListNode* pre = NULL;
ListNode* cur = Head->next;
ListNode* next = cur->next;
while (next != NULL) {
cur->next = pre;
pre = cur;
cur = next;
next = next->next;
}
cur->next = pre;
Head->next = cur;
}
阅读全文
相关推荐














