怎么把一个单链表里面所有得元素倒置
时间: 2023-05-30 22:07:07 浏览: 98
可以使用迭代或递归方法来倒置一个单链表。
迭代方法:
1. 初始化三个指针,分别指向前一个节点、当前节点和下一个节点。
2. 从头节点开始遍历链表,每次将当前节点的 next 指针指向前一个节点。
3. 将三个指针向后移动,继续遍历链表,直到当前节点为空。
4. 将头节点指向前一个节点,完成链表的倒置。
Python 代码实现:
```
def reverseLinkedList(head):
pre = None
cur = head
while cur:
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
return pre
```
递归方法:
1. 将链表的头节点和下一个节点分别传入递归函数中。
2. 当前节点的 next 指针指向前一个节点。
3. 将当前节点作为下一个节点的前一个节点传入递归函数中。
4. 尾节点返回时,将头节点指向前一个节点,完成链表的倒置。
Python 代码实现:
```
def reverseLinkedList(head):
if not head or not head.next:
return head
new_head = reverseLinkedList(head.next)
head.next.next = head
head.next = None
return new_head
```
相关问题
把一个带头结点的单链表的倒置
将一个带头结点的单链表倒置,可以通过遍历链表,依次将每一个节点的 next 指针指向前一个节点来实现。
具体的实现过程如下:
1. 定义三个指针:p、q、r,分别指向当前节点、前一个节点和后一个节点。
2. 遍历链表,依次将每一个节点的 next 指针指向前一个节点。
3. 在遍历链表的过程中,需要先保存当前节点的下一个节点,以便继续遍历。
4. 当遍历到最后一个节点时,将它的 next 指针指向前一个节点,这样链表就被倒置了。
下面是具体的代码实现:
```python
def reverse_linked_list(head):
if head is None or head.next is None:
return head
p = head.next
q = None
r = None
while p is not None:
r = p.next
p.next = q
q = p
p = r
head.next = q
return head
```
其中,head 是头结点,head.next 指向链表的第一个节点。遍历链表时,从第一个节点开始遍历,因此 p 初始指向第一个节点。为了防止链表为空或只有一个节点,需要先判断 head 和 head.next 是否为空。
C语言把一个带头结点的单链表的倒置代码
假设单链表的节点结构体定义如下:
```c
struct ListNode {
int val;
struct ListNode *next;
};
```
带头结点的单链表的倒置可以通过遍历整个链表,不断将每个节点的 next 指针指向其前一个节点来实现。具体代码实现如下:
```c
void reverseList(struct ListNode* head) {
if (head == NULL || head->next == NULL) {
return;
}
struct ListNode *prev = NULL, *curr = head->next, *next;
while (curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head->next = prev;
}
```
其中,prev 表示当前节点的前一个节点,curr 表示当前节点,next 表示当前节点的后一个节点。初始时,prev 为 NULL,curr 指向第一个节点(即 head->next),然后循环遍历整个链表,每次将 curr 的 next 指针指向其前一个节点 prev,然后更新 prev 和 curr 指针,最后将 head->next 指向反转后的链表的第一个节点(即原链表的最后一个节点)。
阅读全文