带头结点链表逆序实现
#include<stdlib.h>
#include<stdio.h>
typedef struct list
{
int data;
struct list*next;
} List;
List* insert_list_last();
List*reverse(List*head);
int main()
{ List*head;
List*p;
head=insert_list_last();
p=head->next;
while(p)
{
printf("%d\n",p->data);
p=p->next;
}
printf("affter reverse\n");
head=reverse(head);
p=head;
while(p->next)
{
printf("%d\n",p->data);
p=p->next;
}
}
List* insert_list_last()
{ int i;
List*head=(List*)malloc(sizeof(List));
List*newnode,*tail;
head->next=NULL;
tail=head;
for(i=0;i<10;i++)
{
newnode=(List*)malloc(sizeof(List));
newnode->data=i;
newnode->next=NULL;
tail->next=newnode;
tail=newnode;
}
return head;
}
List*reverse(List*head)
{ List*p,*q,*r;
if(head==NULL) return NULL;
p=head;
q=head->next;
if(q==NULL) return head;
while(q)
{
r=q->next;
q->next=p;
p=q;
q=r;
}
head->next=NULL;
return p;
}