单向链表的反转

题目要求:

给定一个链表,请设计函数Reverse将链表L就地逆转,即不需要申请新的节点,将单向链表的第一个节点变为最后一个节点,第二个变为倒数第二个。

分析:

比较明显,解决该问题的基本思路是:利用循环,从链表头开始逐个处理。循环设计中,最核心的要点是如何找出,循环不变式:表示一种在循环过程进行时不变的性质,不依赖于前面所执行过程的重复次数的断言。

想象一个场景,每次前我们都应面对两个链表,其中Old_head是一个待逆转的链表,即旧的链表头,而New_head是一个新的已经逆转好的链表(即“新”表头,)每次循环的目的是把old元素的第一个元素插到New_head的头上,这轮循环执行好以后,Old_head和New_head还是分别指向新的待逆转链表和已经逆转好的链表。

单向链表的逆转

节点指针命名为PtrToNode,阅读方便,单链表类型命名为List,主要是方便分别给出的变量到底是个链表头,还是一个单个节点

代码如下:

List Reverse(List L)

{

    List New,Old;

    PtrToNode Temp;

    New= NULL;Old= L;

    while(Old)

    {

        temp = Old;

        Old= Old->next;

         temp->next=New;

         New=temp;

    }    

    return New;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容