数据结构编写代码,利用带头结点单链表原来的节点空间逆转一个单链表
时间: 2024-03-13 13:21:01 浏览: 15
```
void reverseList(Node* head) {
if (head == nullptr || head->next == nullptr) {
return;
}
Node* pre = head->next;
Node* cur = pre->next;
pre->next = nullptr;
while (cur != nullptr) {
Node* next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
head->next = pre;
}
```
相关问题
编写代码,利用带头结点单链表原来的节点空间逆转一个单链表,
假设单链表的头结点为head,可以按照以下步骤实现单链表的逆转:
1. 定义三个指针pre、cur和next,分别指向逆转后的前一个节点、当前节点和下一个节点。
2. 将cur指向头结点的下一个节点,pre和next指向NULL。
3. 遍历单链表,每次将cur的next指针指向pre,然后将pre、cur和next分别后移一位。
4. 遍历结束后,将头结点的next指针指向pre,即逆转后的链表头。
以下是具体的代码实现:
```
void reverseList(Node* head) {
if (head == NULL || head->next == NULL) {
return;
}
Node* pre = NULL;
Node* cur = head->next;
Node* next = NULL;
while (cur != NULL) {
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
head->next = pre;
}
```
需要注意的是,此处的单链表带头结点,因此在实现逆转时需要从头结点的下一个节点开始遍历,同时在逆转完成后,需要将头结点的next指针指向逆转后的链表头。
利用单链表原来的结点空间逆转一个单链表
可以通过遍历单链表,依次将每个结点的指针指向它的前驱结点来实现单链表的逆转。需要注意的是,在修改指针指向时,需要记录当前结点的前驱结点和后继结点,以免丢失链表中的结点。
以下是一个示例代码:
```c++
void reverseLinkedList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr != nullptr) {
ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;
}
```
在这段代码中,使用三个指针分别记录当前结点、当前结点的前驱结点和后继结点。在遍历单链表的过程中,将当前结点的指针指向它的前驱结点,然后将指针向后移动。最后将头结点指向逆转后的链表的头结点,完成单链表的逆转。