编写一个函数,实现将一个带头结点的单向链表数据逆置,代码怎么写呀?

编写一个函数实现单向链表的逆置,单向链表的遍历我不太懂,不明白怎么实现全表数据逆置

2个回答

/*从前向后,依次删除结点,并将删除的结点插入到头结点之后 此代码仅描述算法,其他自己打磨去吧 ,
算法过程,删除第二个结点,放在第一个结点和头结点之间,然后删除第三个元素,放在头结点之后,即在原先第二个结点之前,直到最后一个元素被挪到头结点和第n-1个元素之间*/
p=h->next; //第一个结点
while(p->next){

q=p->next; //用q记录要删除的结点

p->next=q->next; //删除结点
q->next=h->next;
h->next=q; //插入到头结点之后

}

leibuyu
leibuyu 回复2048www: 如果理解不了,切记,一图抵万言,画出四五个结点,模拟下过程就明白了
10 个月之前 回复
leibuyu
leibuyu 回复2048www: P指针不需要后移,因为每循环一次都删掉P指针之后的结点,一个个的删除,直到删光,
10 个月之前 回复
leibuyu
leibuyu 回复2048www: h是头指针,q->next=h->next和h->next=q,这两句合在一起就是把q指针所指的结点插入到头结点之后,成为新的第一个结点
10 个月之前 回复
weixin_43728110
liruby q->next=h->next是什么意思叻?还有这个p是怎么后移去遍历之后的结点呀?
10 个月之前 回复
LinkList Reverse (LinkList L)
{
  LNode *p,*r;//p为工作指针,r为p的后继以防断链
  p=L->next;//从第一个元素结点开始
  L->next=NULL;//先将头结点L的next域置为NULL
  while(p!=NULL)//依次将元素结点摘下
  {
      r=p->next;//暂存p的后继
      p->next=L->next;//将p结点插入到头结点之后
      L->next=p;
      p=r;
  }
  return L;
}

Linklist reserve(LinkList L)
{
  LNode *pre,*p=L->next,*r=p->next;
  p->next=NULL;//处理第一个结点
  while(r!=NULL)//r为空,则说明p为最后一个结点

  {
    pre=p;//依次遍历
    p=r;
    r=r->next;
    p->next=pre;//指针反转
  }
  L->next=p;//处理最后一个结点
  return L;
}

https://www.cnblogs.com/wyloving/p/8298925.html

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复leibuyu: 这是概念性的代码,需要你自己完善LNode LinkList
10 个月之前 回复
leibuyu
leibuyu 这代码真的没问题么?
10 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐