带头结点的单链表倒置
时间: 2024-03-23 18:32:10 浏览: 61
带头结点的单链表倒置可以通过以下代码实现:
```C++
void ReverseList(Linklist L){
ListNode* pre,* p=L->next,* r=p->next;
p->next=NULL;
while(r!=NULL){
pre=p;
p=r;
r=r->next;
p->next=pre;
}
L->next=p;
}
```
以上代码的实现思路是:将链表中每个节点的指针方向反转,使得原来指向下一个节点的指针指向上一个节点,最后将头结点指向倒置后的第一个节点。
相关问题
将输入的带头结点单链表倒置代码
以下是将带头结点的单链表倒置的代码:
```C++
void reverseList(Node* head) {
if (head == nullptr || head->next == nullptr) {
return; // 链表为空或只有一个节点,直接返回
}
Node* prev = nullptr;
Node* curr = head->next;
while (curr != nullptr) {
Node* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head->next = prev;
}
```
其中,`Node` 是单链表节点的结构体,包含一个 `int` 类型的数据成员 `data` 和一个指向下一个节点的指针 `next`。`head` 是指向链表头结点的指针,即 `head->next` 指向链表的第一个节点。在代码中,我们使用三个指针 `prev`、`curr` 和 `next`,分别表示当前节点的前驱、当前节点和当前节点的后继。在遍历链表的过程中,我们每次将当前节点的 `next` 指针指向它的前驱,然后将 `prev`、`curr`、`next` 分别向后移动一个节点,直到遍历完整个链表。最后,将头结点的 `next` 指针指向反转后的链表的第一个节点。
把一个带头结点的单链表的倒置
将一个带头结点的单链表倒置,可以通过遍历链表,依次将每一个节点的 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 是否为空。
阅读全文