算法(15)翻转链表

2018-11-08  本文已影响8人  猪_队友

题目描述

输入一个链表,反转链表后,输出新链表的表头。

思路:
就是把原节点的next节点当做头结点,然后将头结点的next指向原节点,其实就是互换一下,依次进行,知道把最后一个节点转换成了头结点。

新建一个空节点,命名为preNode,然后将pNode节点(原节点)的next节点指向这个前节点,然后将我们自身的地址给这个前节点,我们自身节点往后移动,原来的pNode.next 地址指向了pNode,这就是将原来的pNode和pNextNode变成了现在的preNode和pNode,其实双方已经换位,就连指向也完全相反了。

学习过C的同学更能理解这个,结合图片,应该就不难理解了。

  public ListNode ReverseList(ListNode head) {
        if (head == null)
            return null;

        ListNode newHead = null;
        ListNode preNode = null;
        ListNode pNode = head;

        while ((pNode != null)) {

            ListNode pNextNode = pNode.next;
            if (pNextNode == null) {
                newHead = pNode;
            }
            pNode.next = preNode;
            preNode = pNode;
            pNode = pNextNode;

        }
        return newHead;
    }
上一篇 下一篇

猜你喜欢

热点阅读