一开始看这两题,我竟然没有看懂他们的不同处,败给了语文
.
.
.
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; } |