#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data ;
struct LNode *next ;
}LNode , *LinkList;
LinkList Createlist( LinkList L){
int num ;
LNode *p , *r = L ;
printf("请输入数据:\n");
scanf("%d",&num) ;
while( num!= -1 ){
p = (LNode *)malloc(sizeof(LNode));
p->data = num ;
r->next = p ;
r = p ;
scanf("%d",&num) ;
}
r->next = NULL ;
return L ;
}
void ViewLinklist( LinkList L ){
LNode *p = (LNode *)malloc(sizeof(LNode));
p = L->next ;
printf("链表为:");
while( p->next ){
printf("%d ->",p->data);
p = p->next ;
}
printf("%d",p->data);
}
LinkList Reverse( LinkList L ){
LNode *p , *r , *q ;
p = L->next ;
while(p!=NULL){
q = p ->next ;
while( q==NULL || q->next==NULL )
return L ;
while(q->next->next!=NULL)
q = q->next ; //每次遍历到尾结点,将其摘下
r = q->next ;
q->next = NULL ;
r->next = p->next ;
p->next = r ;
p = r->next; //p是行动指针,将摘下结点插入其后
}
return L;
}
int main()
{
LinkList L = (LinkList )malloc(sizeof(LNode));
Createlist( L ) ;
ViewLinklist(L);
printf("\n");
Reverse(L);
ViewLinklist(L);
return 0;
}
单链表(L1→L2→...→Ln) 重排为(L1→Ln→L2→Ln-1→L3→Ln-2...)
猜你喜欢
转载自blog.csdn.net/RRWJ__/article/details/82954898
今日推荐
周排行