美文网首页
反转一个链表的思路

反转一个链表的思路

作者: graychen | 来源:发表于2017-12-07 14:12 被阅读0次

    输入: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)

    相关文章

      网友评论

          本文标题:反转一个链表的思路

          本文链接:https://www.haomeiwen.com/subject/pdvdixtx.html