单链表就地逆置,创建单链表,输入单链表的数据元素,以-1结束。利用原有结点实现单链表的就地逆置,输出逆置后的单链表。
时间: 2024-10-08 22:16:55 浏览: 30
单链表的就地逆置是指在不额外分配新节点的情况下,通过改变现有链表节点的指针方向,将链表顺序反转。这里是一个基本步骤的描述:
1. **创建单链表**:首先,你需要定义一个结构体或类表示链表节点,包含一个数据域`data`和一个指向下一个节点的指针`next`。
```cpp
struct ListNode {
int data;
ListNode* next;
};
```
2. **输入单链表数据**:从用户那里获取输入,通常遍历循环接收,直到遇到-1作为结束标志。
```cpp
ListNode* createList() {
ListNode* head = nullptr;
ListNode* temp;
int input;
cout << "请输入链表元素(-1结束): ";
while (cin >> input && input != -1) {
temp = new ListNode{input, nullptr};
if (!head) {
head = temp;
} else {
temp->next = head;
head = temp;
}
}
return head;
}
```
3. **就地逆置单链表**:使用三个指针`prev`, `current`, 和 `next`,其中`prev`始终指向当前节点的前一个节点,`current`指向当前节点,开始时都为`nullptr`。然后移动它们,当`current`不为空时,更新`current->next`指向前一个节点,并移动到下一个节点。
```cpp
void reverseList(ListNode*& head) {
ListNode* prev = nullptr, *current = head, *next = nullptr;
while (current) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head = prev; // 更新头节点
}
```
4. **输出逆置后的链表**:最后,你可以遍历新的头节点,打印出每个节点的数据。
```cpp
void printList(ListNode* node) {
while (node) {
cout << node->data << " -> ";
node = node->next;
}
cout << "NULL" << endl;
}
// 使用示例:
ListNode* head = createList();
reverseList(head);
printList(head);
```
阅读全文