当前位置: 代码迷 >> C语言 >> [原创]链表逆置
  详细解决方案

[原创]链表逆置

热度:171   发布时间:2005-05-01 01:00:00.0
[原创]链表逆置
题目:将一个有头结点的链表逆置
我写的时候用-1做为结束标记。我用了Head做为辅助头结点。有兴趣的去看看。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct node{
  int data;
  struct node *next;
}Node,*LinkList;
void CreateList(LinkList *head)
{   LinkList p,q;
    int x;
if((*head=(Node *)malloc(sizeof(Node)))==NULL) exit(1);
    (*head)->next=NULL;
q=(*head);
printf("please input data:\n");
scanf("%d",&x);
do{
        if((p=(Node *)malloc(sizeof(Node)))==NULL) exit(1);
  p->data=x;
  p->next=NULL;
  q->next=p;
  q=p;
  p=NULL;
  printf("please input number:\n");
  fflush(stdin);
  scanf("%d",&x);
}while(x!=-1);
}
void Reverse(LinkList head)
{LinkList p,q,s=NULL,Head;
int count=0,i;
p=head->next;
while(p)
   {   count++;
       p=p->next;
   }
   p=head->next;
   if((Head=(Node *)malloc(sizeof(Node)))==NULL) exit(1);
   Head->next=p;
   head->next=NULL;
for(i=0;i<count;i++)
   {  p=Head->next;
      Head->next=p->next;
   p->next=NULL;
   if(s==NULL)
   s=p;
   else
   { p->next=s;
      s=p;
   }
   }
   head->next=s;
   free(Head);
}
void Print(LinkList head)
{ LinkList p;
  p=head->next;
  while(p)
  {  printf("%d\t",p->data);
     p=p->next;
   }
  
}
main()
{ LinkList head;
  CreateList(&head);
  Print(head);
  Reverse(head);
  printf("\n");
  Print(head);
}


搜索更多相关的解决方案: 链表  

----------------解决方案--------------------------------------------------------
热情帮我修改后的

大家将函数void Reverse(LinkList head)换成下面的。以下是热情写的。他写的比我好多了。我推荐大家看他的 void Reverse(LinkList head) { LinkList p,q,r; p=head->next; q=p->next; while(q!=NULL) { r=q->next; q->next=p; p=q; q=r; } head->next->next=NULL; head->next=p;

}


----------------解决方案--------------------------------------------------------
  相关解决方案