注册 登录
编程论坛 数据结构与算法

单链表如何倒置?

wddy 发布于 2005-06-12 17:48, 5356 次点击
单链表原地置逆,就是把单链表原地倒置,算法该怎么写那?
10 回复
#2
seeker2005-06-12 17:55

/*对单链表实现就地逆置*/ #include "stdlib.h" #include "stdio.h" struct LNode { int data; struct LNode *next; }; typedef struct LNode node; typedef node *LinkList;

void Inverse(LinkList L) { LinkList ptr,head,tail; int num,i; tail=(LinkList)malloc(sizeof(node)); tail->next=NULL; ptr=tail; printf("\n请输入5个数据:"); for(i=0;i<=4;i++) { scanf("%d",&num); ptr->data=num; head=(LinkList)malloc(sizeof(node)); head->next=ptr; ptr=head; } ptr=ptr->next; printf("逆置后为:"); while(ptr!=NULL) { printf("%d ",ptr->data); ptr=ptr->next; } printf("\n"); } void main() { LinkList L; Inverse(L); }

#3
stnlcd2005-06-12 20:24
将表头和链表分离,然后将剩下的那些结点按“头插法”依次插入到分离出来的表头上重新组合链表就可以了。
#4
激情依旧2005-06-13 07:09
我早就了发了出来。去这里看看 https://bbs.bc-cn.net/bbs/dispbbs.asp?BoardID=179&ID=17142

[此贴子已经被作者于2005-6-13 7:10:04编辑过]

#5
seeker2005-06-13 12:32
看了,不过比较复杂。
#6
激情依旧2005-06-16 08:09
    你的根本就不是逆置。只是头插法罢了。你连逆置的概念都没弄清楚。如果像你那样做。根本就没意义。而且你的只能是5个。。。。。
#7
热情依然2005-06-16 08:38
Node  *p,*q,*r;
  p=head-&gt;link;
  q=p-&gt;link;
  while(q!=NULL)
  {
   r=q-&gt;link;
   q-&gt;link=p;
   p=q;
   q=r;
  }
  head-&gt;link-&gt;link=NULL;
  head-&gt;link=p;

这部分就可以实现逆置
#8
bobog2010-04-23 21:32
能不能用JAVA来写啊?  

不懂。。。
#9
longxuan10112010-06-25 22:58
很简单
void exch(LinkList &L)
{
  LinkList p,s;
  p=L->next;
  L->next=NULL;
  while(p)
   {
     s=p;
     p=p->next;
     s->next=L->next;
     L->next=s;
   }
}
#10
淘气公主2010-08-01 20:19
如链表:L——  ——A——B——C——D——E
倒置第一步有:L——  ——B——A——C——D——E
第二步有:L——  ——C——B——A——D——E
……
最后又:L——  ——E——D——C——B——A
Status DaoZhi(LinkList &L){
    LinkList p,pre;
    p=L->next;
    pre=p->next;
    while(pre){
      p->next=pre->next;
      pre->next=L->next;
      L->next=pre;
      pre=p->next;
    }
}
#11
qq24424386992016-10-14 19:53
回复 10楼 淘气公主
大神我爱你  感谢解决我的疑惑
1