6-1 单链表逆转(20 分)
本题要求实现一个函数,将给定的单链表逆转。
函数接口定义:
其中List
结构定义如下:
1 2 3 4 5 6
| typedef struct Node *PtrToNode; struct Node { ElementType Data; PtrToNode Next; }; typedef PtrToNode List;
|
L
是给定单链表,函数Reverse
要返回被逆转后的链表。
裁判测试程序样例:
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
| #include <stdio.h> #include <stdlib.h>
typedef int ElementType; typedef struct Node *PtrToNode; struct Node { ElementType Data; PtrToNode Next; }; typedef PtrToNode List;
List Read(); void Print( List L );
List Reverse( List L );
int main() { List L1, L2; L1 = Read(); L2 = Reverse(L1); Print(L1); Print(L2); return 0; }
|
输入样例:
输出样例:
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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| #include <stdio.h> #include <stdlib.h>
typedef int ElementType; typedef struct Node *PtrToNode; struct Node { ElementType Data; PtrToNode Next; }; typedef PtrToNode List;
List Read(); void Print( List L );
List Reverse( List L );
int main() { List L1, L2; L1 = Read(); L2 = Reverse(L1); Print(L1); Print(L2); return 0; } List Read() { PtrToNode head=NULL; PtrToNode list=NULL; int len; scanf("%d",&len); if(len==0) return NULL; int num; scanf("%d",&num); head=(PtrToNode)malloc(sizeof(struct Node)); head->Data=num; head->Next=NULL; list=head; len--; while(len) { PtrToNode node=(PtrToNode)malloc(sizeof(struct Node)); scanf("%d",&num); node->Data=num; node->Next=NULL; list->Next=node; list=node; len--; } return head; } void Print( List L ) { if(L==NULL) return ; while(L!=NULL) { printf("%d ",L->Data); L=L->Next; } putchar('\n'); } List Reverse( List L ) { if(L==NULL) return NULL; PtrToNode l1=NULL;
PtrToNode l2=NULL; while(L!=NULL) { l1=L->Next; L->Next=l2; l2=L; L=l1; } return l2; }
|