将输入的带头结点单链表倒置代码
时间: 2023-09-25 15:12:28 浏览: 97
以下是将带头结点的单链表倒置的代码:
```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` 指针指向反转后的链表的第一个节点。
相关问题
带头结点的单链表倒置
带头结点的单链表倒置可以通过以下代码实现:
```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语言把一个带头结点的单链表的倒置代码
假设单链表的节点结构体定义如下:
```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 指向反转后的链表的第一个节点(即原链表的最后一个节点)。
阅读全文