Single LinkedList Reverse
本题要求实现一个函数,将给定的单链表逆转。
函数接口定义:
List Reverse(List L);
其中List
结构定义如下:1234567typedef struct Node *PtrToNode;strut Node { ElementType Data;/*存储结点数据*/ PtrToNode Next;/*指向下一个结点的指针*/ };typedef PtrToNode List;/*定义单链表类型*/
L
是给定链表,函数Reverse
要返回被逆转后的链表。
最后的代码:
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()
{
int len = 0;
int num = 0;
PtrToNode head = NULL;
PtrToNode last = NULL;/*用于存放线性表*/
scanf("%d",&len);
if( 0== len){
return NULL;
}
scanf("%d",&num);/*读取第一个结点*/
head = (PtrToNode)malloc(sizeof(struct Node));
head->Data = num;
head->Next = NULL;
last = head;
len--;
while(len > 0){
scanf("%d",&num);
PtrToNode node = (PtrToNode)malloc(sizeof(struct Node));
node->Data = num;
node->Next = NULL;
last->Next = node;
last = node;/*将两部分连接起来*/
len --;
}
return head;
}
void Print(List L){
if(NULL == L){
return ;
}
PtrToNode last = L;
while(NULL != last){
printf("%d ",last->Data);
last = last->Next;
}
putchar('\n');
}
List Reverse(List L){
if(NULL == L){
return NULL;
}
PtrToNode listre = NULL;
PtrToNode t = L->Next;
if(NULL == t){/*只有一个的情况*/
listre = L;
return listre;
}
L->Next = t->Next;
listre = t;
t->Next = L;
while(NULL != L->Next){
t = L->Next;
L->Next = t->Next;
t->Next = listre;
listre = t;
}
return listre;
}
结果: