写出一个采用单链表存储的线性表A的数据元素逆置的算法
时间: 2023-04-10 09:05:07 浏览: 99
可以使用头插法,从原链表的头节点开始,依次将每个节点插入到新链表的头部,最终得到逆置后的链表。具体实现代码如下:
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;
}
相关问题
试写出一个采用单链表存储的线性表的数据元素逆置的算法
可以采用遍历链表的方式,依次将每个结点的指针指向其前驱结点,从而实现链表的逆置。具体实现如下:
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(A带表头结点Head)的数据元素逆置的算法)
可以使用三个指针分别指向当前节点、前一个节点和后一个节点,依次遍历链表并将当前节点的指针指向前一个节点,直到遍历完整个链表。具体实现如下:
```
void reverseList(ListNode* head) {
if (head == NULL || head->next == NULL) {
return;
}
ListNode* prev = NULL;
ListNode* curr = head->next;
ListNode* next = NULL;
while (curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head->next = prev;
}
```
其中,ListNode 是链表节点的结构体,包含一个 val 值和一个指向下一个节点的指针 next。
阅读全文