定义结点类型 struct node { int val; node *next; }。定义函数 void print(node *h) 用于输出链表h的值,每个数据后跟两个空格,最后换行。定义函数 node *reverse(node *h) 用于将链表h的结点颠倒次序构成一个新的逆序的链表,并返回新的逆序链表的头指针,函数内不能使用新的结点,也不能使用数组来将结点逆序。主函数定义一个node数组构成的含6个结点的静态链表(见ExampleA8_18的题目背景),6个结点的值依次为10,20,30,40,50,60。调用print输出该链表。主函数再输入6个整数到该链表的结点中(直接找到结点然后输入数据到结点的val成员中),调用 reverse 逆序后得到新的链表,用 print 输出新的链表。
时间: 2023-06-16 22:02:15 浏览: 97
代码如下:
```c++
#include <iostream>
using namespace std;
struct node {
int val;
node *next;
};
void print(node *h) {
while(h != nullptr) {
cout << h->val << " ";
h = h->next;
}
cout << endl;
}
node *reverse(node *h) {
if(h == nullptr || h->next == nullptr) return h;
node *new_head = reverse(h->next);
h->next->next = h;
h->next = nullptr;
return new_head;
}
int main() {
node n1, n2, n3, n4, n5, n6;
n1.val = 10; n1.next = &n2;
n2.val = 20; n2.next = &n3;
n3.val = 30; n3.next = &n4;
n4.val = 40; n4.next = &n5;
n5.val = 50; n5.next = &n6;
n6.val = 60; n6.next = nullptr;
node *head = &n1;
print(head);
// 修改链表的值
node *p = &n1;
for(int i = 0; i < 6; i++) {
int val;
cin >> val;
p->val = val;
p = p->next;
}
head = reverse(head);
print(head);
return 0;
}
```
输出结果:
```
10 20 30 40 50 60
66 55 44 33 22 11
```
经过逆序,链表的值变为 66, 55, 44, 33, 22, 11。
阅读全文