反转一个链表的思路

2017-12-07  本文已影响0人  graychen

输入:A->B->C->D->E->NULL  输出:E->D->C->B->A->NULL

第一种使用while循环遍历直到最后一个节点

先贴出代码实现:

总结的思路:1 用一个对象(temp)保存下一个节点,以免丢失这个对象。

            2.把当前对象的下一个指向一个新的对象(pre)

            3.新的这个对象(pre) 赋值为当前的对象

            4.把当前对象赋值为下一个对象,也是的步骤1保存的对象 。

            5.循环以上步骤

详细的解析:

首先创建一个空的对象pre 。ListNode pre = null;

创建一个对象并赋值为要反转对象。ListNode cur = head;

创建一个while循环,条件是cur 不为空

第一次循环:

    1.创建一个临时对象保存当前对象A(A->B->C->D->E)的下一个指向:ListNode nextTemp = cur.next 这么做的目的是接下来要改变当前对象的下一个指向,以免丢失。此时nextTemp = B(B->C->D->E)

    2.将当前对象A(A->B->C->D->E)的下一个节点指向pre 。cur.next = pre ,执行此步骤后变成A->pre(null)。

    3.将pre这个对象赋值为当前的对象pre = cur;执行此步骤后变成A->pre(A)。

    4.将当前的对象变成之前的下一个节点nextTemp 。cur = nextTemp  执行此步骤后变成

pre变成A对象,cur变成B(B->C->D->E)。

第二次循环:

        1.创建一个临时变量保存当前对象B(B->C->D->E)的下一个指向:ListNode nextTemp = cur.next。

这个时候nextTemp = C(C->D->E)

        2.将当前对象B(B->C->D->E)的下一个节点指向pre(A)这个对象,变成了B-A;

        3.将pre这个对象赋值为当前对象cur(B),变成pre(B->A)

        4.将当前对象变成之前的下一个节点nextTemp 。

执行此步骤后变成cur变成C(C->D->E),pre变成B(B->A)对象

以此循环知道cur为null 退出循环

最后返回pre这个对象。pre = E(E->D->C->B->A)

上一篇下一篇

猜你喜欢

热点阅读