1,算法描述:实现带头结点的单链表的逆置。
代码如下:
#include<stdio.h>
#include <malloc.h>
typedef struct LNode
{
int data;
LNode *next;
}LNode,*LinkList;
//creat a LinkList
bool creatLinklist(LinkList&L,int n)
{
LinkList p,q,t,s;
L=(LNode*)malloc(n*sizeof(LNode));
if(!L)
return false;
q=L;
for(int i=1;i<=n;i++)
{
p=(LNode*)malloc(sizeof(LNode));
scanf("%d",&p->data);
L->next=p;
L=p;
}
p->next=NULL;
L=q;
return true;
}
bool inversLinkList(LinkList&L)
{
LinkList p,q,t;
p=L->next;//The first Node
q=p->next;//The second Node
p->next=NULL;
while(q)
{
t=q->next;// keep the third Node
q->next=p;// the second Node points to the first Node in a loop
p=q; //p points to next Node
q=t; //q points to next Node
}
L->next=p; //set head Node
return true;
}
void main()
{
LinkList Llist,p;
int k;
int elemet;
int position;
printf("input the number of LinkList to be created:");
scanf("%d",&k);
creatLinklist(Llist,k);
printf("\n");
inversLinkList(Llist);
printf("output the new LinkList:\n");
p=Llist->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
free(Llist);
}
运行结果如下: