view plain
#include <stdio.h>
#include <malloc.h>
typedef struct test
{
int a;
struct test *next;
}lianbiao;
lianbiao* create()//創建鏈表
{
lianbiao *head,*temp;
int i;
printf("請輸入一些整數,以0結束:");
temp=head=(lianbiao *)malloc(sizeof(lianbiao));
scanf("%d",&i);
if(i==0)
{
printf("you input zero!exit now!");
return head;
}
head->a=i;
head->next=NULL;
while(1)
{
scanf("%d",&i);
if(i==0)
break;
else
{
temp->next=(lianbiao *)malloc(sizeof(lianbiao));
temp=temp->next;
temp->a=i;
temp->next=NULL;
}
}
return head;
}
lianbiao* reverse(lianbiao *p)//逆轉鏈表
{
lianbiao *temp1,*temp2;
if(p->next==NULL)
{
printf("鏈表節點數小於2,無法逆轉!\n");
return p;
}
int flag=0;
while(p->next!=NULL)
{
if(flag==0)
{
temp1=p;
temp2=p->next;
p->next=NULL;
p=temp2;
flag=1;
continue;
}
temp2=p->next;
p->next=temp1;
temp1=p;
p=temp2;
}
p->next=temp1;//將原鏈表的末尾節點指向倒數第二個節點
return p;
}
void print(lianbiao *p)
{
while(p->next!=NULL)
{
printf("%d ",p->a);
p=p->next;
}
printf("%d ",p->a);
printf("\n");
}
int main()
{
lianbiao *temp;
temp=create();
print(temp);//打印出原鏈表
print(reverse(temp));//打印出逆轉後的鏈表
return 0;
}
作者“simonjay2007的專欄”