数据结构:单链表(逆序)

来源:互联网 发布:淘宝优惠券微信公众号 编辑:程序博客网 时间:2024/06/08 20:01

1 .单链表的逆序操作是链表中的一个重要操作,也是面试中不可缺少的一个环节,几乎许多涉及到链表的面试题中都会提到如何将一个链表进行逆序的操作考点;下面采用“迭代循环”的方式来实现将一个链表进行逆序,

如链表中原来的各节点值分别为:

A    B    C    D     E  

逆序后打印为:

E    D    C    B     A
------------------------------------------------------- Function 链表逆序 ------------------------- ReverseLinkList  -----------------------------------------------------/*********    链表逆序   *************//******   typedef   void * LinkList   *****/void Reverse_LinkList(LinkList list)    {      struct LList *mPtr = (struct LList*)list;      struct LinkNode *mPre = NULL;  //指向NULL      struct LinkNode *mPcur = mPtr->header.next;       struct LinkNode *mPtmp =NULL;      if (NULL == list)      {       return;      }      while (mPcur != NULL)      {        mPtmp = mPcur->next;  //缓存下一个节点        mPcur->next = mPre;        mPre = mPcur;        mPcur = mPtmp;      }      mPtr->header.next = mPre;    }
 图(1)  链表中各节点值和节点的顺序

这里写图片描述
图(1)

图(2)链表逆序后的效果:
这里写图片描述
图(2)
实现这个链表逆序的思路和过程就是从头结点的下一个节点(即首节点)开始,依次改变指针的指向;其详细的流程如下图:

步骤(1)
这里写图片描述

 /******* 指向NULL *******/struct LinkNode *mPre = NULL; /********* 指向首节点 *****/struct LinkNode *mPcur = mPtr->header.next;  /******** 辅助指针,保存mPtr所指节点的下一个节点 ***********/struct LinkNode *mPtmp =NULL; 1.首先让mPcur指针指向首节点的下一个节点;因为会改变mPcur指针的指向,所以得借用一个辅助指针mPtmp;让mPtmp指针保存mPcur指针所指向的下一个节点值;2.然后改变mPtr的指向,让其指向指针mPre(为NULL),让这个节点称为当前的尾节点;3.改变mPtr指针的指向,让其指向mPcur,这样while每循环一次,就让mPtr向前不断地移动,直到最终为NULL;4.每改变一次mPcur的指向,就让mPcur指向下一个节点;最终mPcur == NULL时,mPtr刚好为最后一个节点;如下图:

这里写图片描述

1 0
原创粉丝点击