用c++创建单链表,输入单链表的数据元素,以-1结束。利用原有结点实现单链表的就地逆置,输出逆置后的单链表。 【输入形式】 1 2 3 4 5 6 7 8 9 10 -1 【输出形式】 10 9 8 7 6 5 4 3 2 1
时间: 2024-10-08 08:19:50 浏览: 21
在C++中,你可以使用结构体定义链表节点,并通过迭代的方式实现单链表的就地逆置。以下是简单的步骤:
首先,定义链表节点的结构体:
```cpp
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
```
然后,编写一个函数接收用户输入并构建链表:
```cpp
void buildList(vector<int>& input) {
ListNode* head = nullptr;
ListNode* tail = nullptr;
for (int num : input) {
if (num != -1) {
ListNode* newNode = new ListNode(num);
if (!head) {
head = tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
} else {
break; // 找到-1作为结束标记
}
}
// 将头节点指向原尾部
head->next = nullptr;
}
```
接下来,实现逆置链表的函数:
```cpp
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr) {
ListNode* temp = curr->next;
curr->next = prev;
prev = curr;
curr = temp;
}
return prev;
}
```
最后,调用这两个函数并输出逆置后的链表:
```cpp
void printList(ListNode* head) {
ListNode* node = head;
while (node) {
cout << node->val << " ";
node = node->next;
}
cout << endl;
}
int main() {
vector<int> input = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1};
buildList(input);
ListNode* reversedHead = reverseList(head);
cout << "[逆置后的链表]: ";
printList(reversedHead);
return 0;
}
```
当你运行这个程序时,它将读取用户输入的数字序列,创建链表并逆置,然后打印出逆置后的链表。注意,这只是一个基本的示例,实际应用中可能需要处理一些边界情况。
阅读全文