算法实现带头结点单链表的就地逆置问题
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*LinkList;
void InitList(LinkList &L)
{
L=(LinkList)malloc(sizeof(Lnode));
L->next=NULL;
}
void CreatLinkList(LinkList &L,int n)
{
LinkList p,r;
r=(LinkList)malloc(sizeof(Lnode));
r=L;
for(int i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Lnode));
scanf("%d",&p->data);
p->next=NULL;
r->next=p;
r=p;
}
}
void PrintLinkList(LinkList &L)
{
LinkList p;
for(p=L->next;p!=NULL;p=p->next)
{
printf("%d ",p->data);
}
printf("\n");
}
void ReverseList(LinkList &L)
{
LinkList p,q;
p=L->next;
L->next=NULL;
while(p!=NULL)
{
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}
int main()
{
LinkList L;
InitList(L);
printf("单链表初始化成功\n");
CreatLinkList(L,6);
ReverseList(L);
PrintLinkList(L);
return 0;
}