单链表的倒置【总结】

思想为:head指针不断后移,指针反向即可,代码为:

#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct node
{
 int data;
 struct node *next;
}node,*LinkList;


void creat(LinkList &L)
{
 node *p,*q;
 L=(LinkList)malloc(sizeof(node));
 if (L==NULL)
 {
  exit(0);
 }
 L->next=NULL;
 L->data=0;
 
 p=L;
 for(int i=5;i>0;i--)
 {
  q=(LinkList)malloc(sizeof(node));
  printf("Input :");
  scanf("%d",&(q->data));
  q->next=NULL;
  p->next=q;
  p=q;
 }
 
}

void ListReverse(LinkList &L)
{
 node * head=L;
 if(head!=NULL&&head->next!=NULL)
 {
  node *p=head;
  node *q=head->next;
  p->next=NULL;
  while(q->next!=NULL)
  {
   head=q->next;
   q->next=p;
   p=q;
   q=head;
  }
  
  head->next=p;
 }
 
}

void main()

 LinkList L;
 //初始化
  creat(L);
 //倒置
 ListReverse(L);
 //遍历显示
 LinkList p;
 p=L->next;
 while(p->next!=NULL)
 {
  printf("%d   ",p->data);
  p=p->next;
 }
 printf("%d",p->data);
}

posted @ 2012-02-03 09:29  zp_Alex  阅读(308)  评论(0编辑  收藏  举报