实现线性链表逆置的思路
时间: 2023-06-20 18:09:26 浏览: 49
要实现线性链表的逆置,可以按照以下思路:
1. 定义三个指针:prev、curr、next;
2. 将 prev 初始化为 NULL,curr 初始化为链表头结点;
3. 遍历链表,每次将 curr 的 next 指针指向 prev,然后依次移动 prev、curr、next 指针;
4. 遍历结束后,将链表的头结点指向 prev。
具体代码实现如下:
```c
void reverseList(ListNode **head) {
ListNode *prev = NULL;
ListNode *curr = *head;
ListNode *next = NULL;
while (curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
*head = prev;
}
```
这样就完成了链表逆置。
相关问题
实现线性链表逆置的思路,即最后一个节点变成第一个结点
线性链表逆置的思路可以通过遍历链表并使用一个指针来实现。具体步骤如下:
1. 初始化三个指针变量:pre、cur、next,分别指向链表头节点的前驱节点、当前节点和后继节点。
2. 将 cur 指向链表头节点。
3. 遍历链表,每次将 cur 的后继节点赋值给 next,将 cur 的指针指向 pre,然后将 pre 指向 cur,cur 指向 next。
4. 当遍历完链表时,链表的尾节点就成为了头节点,因此需要将原链表的头节点指向空节点,将原链表的尾节点指向 pre,这样就完成了链表的逆置。
下面是具体的代码实现:
``` python
class Node:
def __init__(self, val):
self.val = val
self.next = None
def reverseList(head):
# 初始化三个指针变量
pre = None
cur = head
next = None
while cur:
# 将 cur 的后继节点赋值给 next
next = cur.next
# 将 cur 的指针指向 pre
cur.next = pre
# 将 pre 指向 cur
pre = cur
# 将 cur 指向 next
cur = next
# 将原链表的头节点指向空节点,将原链表的尾节点指向 pre
head.next = None
head = pre
return head
```
其中,head 表示链表的头节点。调用 reverseList(head) 函数即可实现链表的逆置。
头插法实现链表逆置
链表逆置是将链表中的节点顺序颠倒。头插法是链表逆置的一种常用方法。具体实现步骤如下:
1. 定义一个新的链表头结点 `new_head`,并初始化为空。
2. 遍历原链表的每一个节点,将其插入到新链表的头部,使其成为新链表的第一个节点。
3. 最终得到的新链表就是反转后的链表。
以下是头插法实现链表逆置的 C++ 代码:
```c++
ListNode* reverseList(ListNode* head) {
ListNode* new_head = NULL; // 定义新链表头结点并初始化为空
while (head != NULL) {
ListNode* next = head->next; // 保存下一个节点
head->next = new_head; // 将当前节点插入到新链表头部
new_head = head; // 更新新链表头结点
head = next; // 处理下一个节点
}
return new_head; // 返回反转后的链表头结点
}
```
需要注意的是,在实际使用中,还需要考虑链表为空的情况。