单链表逆序

来源:互联网 发布:小说美利坚仓储淘宝王 编辑:程序博客网 时间:2024/04/29 23:27
题目:已知单向链表的头结点head,写一个函数把这个链表逆序


假设需要逆序的单链表为:




则逆序以后的链表为:




从图中我们可以看出我们需要做的核心操作就是
p和q,如果p是q的前驱,那么逆序后p就是q的后继


思路:遍历单链表,把当前指针指向的节点指针赋给其后继节点的next指针域;


Status ListReverse(LinkList L)
{
//如果指向头结点的指针为空,说明此链表不存在,如果指向第一个节点的指针为空,说明链表空,返回
   if(L==null||L->next==null)
   {
   return L;
   }
   //设置三个指针
   LinkList current,pnext,prev;//分别是  当前指针指向的节点,当前指向节点的下一个节点指针


   current=L->next;//设置当前指针指向的节点是链表的第一个节点
   current->next=null;//根据图可知,链表逆序后第一个节点为最后一个节点,应该指向null
   pnext=current->next;//保存当前指向节点的下一个节点(第二个节点)
   //开始从第二个节点遍历
   while(pnext)
   {
   //如果节点存在
  //保存当前节点后继
  prev=pnext;
  //把其原来的前驱节点变成其后继(把其前驱节点的指针赋给其next指针域)
  pnext->next=current;
  //更新
  current=pnext;
  pnext=prev;


   
   }


   L->next=current;
   return L;


}
原创粉丝点击