美文网首页
算法(15)翻转链表

算法(15)翻转链表

作者: 猪_队友 | 来源:发表于2018-11-08 16:58 被阅读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;
        }
    

    相关文章

      网友评论

          本文标题:算法(15)翻转链表

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