本题目要求编写一个实现带头结点单链表就地逆置的一个程序。在编写该程序时,要求单独写一个函数来实现单链表的逆置,并编写代码在main函数测试结果。
输入格式:
首先输入一个整数N,表示测试数据的组数,然后是N组测试数据。每组测试数据在一行上先输入数据个数n及n个整数。
输出格式:
对于每组测试,输出逆置后的单链表,每两个数据之间留一个空格,行末不能有多余的空格。
输入样例:
在这里给出一组输入。例如:
1
10 5 8 10 3 9 1 39 28 20 57
输出样例:
在这里给出相应的输出。例如:
57 20 28 39 1 9 3 10 8 5
输入样例:
在这里给出一组输入。例如:
3
10 6 10 3 8 2 7 0 19 30 45
4 28 12 23 67
20 12 15 25 6 4 10 23 3 8 43 2 7 5 16 29 61 30 19 42 38
输出样例:
在这里给出相应的输出。例如:
45 30 19 0 7 2 8 3 10 6
67 23 12 28
38 42 19 30 61 29 16 5 7 2 43 8 3 23 10 4 6 25 15 12
题解
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}LNode,*LinkList;
void InsertListHead(LinkList L,int x){
LinkList s = (LinkList)malloc(sizeof(LNode));
s->data = x;
s->next = L->next;
L->next = s;
}
void PrintList(LinkList L){
LinkList p = L->next;
while(p){
if(p->next!=NULL){
printf("%d ",p->data);
p = p->next;
}else{
printf("%d",p->data);
p = p->next;
}
}
}
int main(){
LinkList L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
int n,m,temp;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d",&temp);
InsertListHead(L,temp);
}
PrintList(L);
if(i!=n-1)
printf("\n");
L->next = NULL;
}
return 0;
}