一开始看这两题,我竟然没有看懂他们的不同处,败给了语文![大哭](https://static-blog.csdn.net/xheditor/xheditor_emot/default/wail.gif)
.
.
.
1.链表的逆序输出
题目描述
按数字输入顺序创建单链表。不可借助数组、容器,不可改变原链表、不可开辟新结点空间。编程实现单链表的逆序输出。
输入
测试次数t
每组测试数据一行,格式如下:
数据个数n,后跟n个整数
输出
对每组测试数据,逆序输出单链表。
样例输入
210 1 2 3 4 5 6 7 8 9 104 19 20 15 -10
样例输出
10 9 8 7 6 5 4 3 2 1 -10 15 20 19
2.链表原地反转
题目描述
按数字输入顺序创建单链表。不可借助数组、容器,不可开辟新结点空间。编写函数,在原链表上实现单链表的反转。例如单链表10->20->30,反转后变为单链表30->20->10。
注:不符合题目要求,使用上题逆序输出不计分。
输入
测试次数t
每组测试数据一行,格式如下:
数据个数n,后跟n个整数
输出
对每组测试数据,输出反转后的单链表。
样例输入
2
10 1 2 3 4 5 6 7 8 9 10
4 19 20 15 -10
样例输出
10 9 8 7 6 5 4 3 2 1
-10 15 20 19
代码实现:
#include<bits/stdc++.h>
using
namespace
std;
struct
lian{
int
num;
lian *next;
};
lian *head;
lian *create()
{
int
n;
lian *ps,*pend;
head=NULL;
cin>>n;
while
(n--)
{
ps=
new
lian;
cin>>ps->num;
if
(head==NULL)
head=ps;
else
pend->next=ps;
pend=ps;
}
pend->next=NULL;
return
head;
}
void
print(lian *h)
{
if
(h->next==NULL)//就这里改用递归输出
{
cout<<h->num<<
" "
;
return
;
}
else
if
(h->next)
print(h->next);
cout<<h->num<<
" "
;
return
;
}
int
main()
{
int
t;
cin>>t;
while
(t--)
{
print(create());
cout<<endl;
}
return
0;
}
问题 B: 链表原地反转(链表)
题目描述
按数字输入顺序创建单链表。不可借助数组、容器,不可开辟新结点空间。编写函数,在原链表上实现单链表的反转。例如单链表10->20->30,反转后变为单链表30->20->10。
注:不符合题目要求,使用上题逆序输出不计分。
输入
测试次数t
每组测试数据一行,格式如下:
数据个数n,后跟n个整数
输出
对每组测试数据,输出反转后的单链表。
样例输入
2
10 1 2 3 4 5 6 7 8 9 10
4 19 20 15 -10
样例输出
10 9 8 7 6 5 4 3 2 1
-10 15 20 19
代码实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
#include<bits/stdc++.h>
using
namespace
std;
struct
lian{
int
num;
lian *next;
};
lian *head;
lian *create(
int
n)
{
lian *ps,*pend;
head=NULL;
pend=NULL;
while
(n--)
{
ps=
new
lian;
cin>>ps->num;
if
(head==NULL)
head=ps;
else
pend->next=ps;
pend=ps;
}
pend->next=NULL;
return
head;
}
lian *reverse(lian *head)//关键代码 用笔画一下就出来了
{
lian *p,*temp,*q,*h;
p=head->next;
h=head;
h->next=NULL;
while
(p)
{
temp=p;
p=p->next;
temp->next=h;
h=temp;
}
head=h;
return
head;
}
void
print(lian *head)
{
lian *h=head;
while
(h)
{
cout<<h->num<<
" "
;
h=h->next;
}
cout<<endl;
}
int
main()
{
int
t,n;
cin>>t;
while
(t--)
{
cin>>n;
print(reverse(create(n)));
}
return
0;
}
|