创建单链表,输入单链表的数据元素,以-1结束。利用原有结点实现单链表的就地逆置,输出逆置后的单链表。
时间: 2024-09-27 19:05:39 浏览: 57
创建单链表并输入数据元素通常需要用户输入一系列数字,当输入 `-1` 时停止。下面是一个简单的C++示例,展示了如何创建链表、插入元素以及逆置链表的过程:
```cpp
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 添加新节点到链表
ListNode* insertNode(ListNode* head, int val) {
if (head == NULL) {
head = new ListNode(val);
return head;
} else {
ListNode* newNode = new ListNode(val);
newNode->next = head;
return newNode;
}
}
// 输入链表数据,直到遇到 -1 结束
ListNode* createLinkedList() {
ListNode* head = NULL;
int input;
cout << "Enter numbers (-1 to stop): ";
while (cin >> input && input != -1) {
head = insertNode(head, input);
}
return head;
}
// 就地逆置链表
ListNode* reverseList(ListNode* head) {
if (head == NULL || head->next == NULL) {
return head;
}
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr != nullptr) {
ListNode* temp = curr->next;
curr->next = prev;
prev = curr;
curr = temp;
}
return prev;
}
// 输出链表
void printList(ListNode* head) {
ListNode* curr = head;
while (curr != nullptr) {
cout << curr->val << " -> ";
curr = curr->next;
}
cout << "nullptr" << endl;
}
int main() {
ListNode* list = createLinkedList();
cout << "Original List: ";
printList(list);
list = reverseList(list);
cout << "Reversed List: ";
printList(list);
return 0;
}
```
这段代码首先通过`createLinkedList`函数输入数据,然后调用`reverseList`函数逆置链表,并最后通过`printList`函数显示原始和逆置后的链表。
阅读全文