首页 > 其他 > 详细

24、反转链表

时间:2019-11-08 00:43:44      阅读:72      评论:0      收藏:0      [点我收藏+]

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

思路:需要定义3个指针,分别指向当前遍历到的节点、它的前一个节点及后一个节点。

测试用例:

(1)输入的链表头指针是null

(2)输入的链表只有一个节点

(3)输入的链表有多个节点

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
        public ListNode ReverseList(ListNode head) {
        if(head == null || head.next == null)
            return head;
        ListNode newHead = null;
        ListNode curNode = head, prevNode = null;
        while(curNode != null){
            ListNode nextNode = curNode.next;
            if(nextNode == null)
                newHead = curNode;
            curNode.next = prevNode;
            prevNode = curNode;
            curNode = nextNode;
        }
        return newHead;
    }
}

递归解法实现反转链表:

    public ListNode ReverseList(ListNode head) {
         if(head == null || head.next == null)
            return head;
        
        //先反转后面的链表,走到链表的末端结点
        ListNode pReverseNode = ReverseList(head.next);
         
        //再将当前节点设置为后面节点的后续节点
        head.next.next = head;
        head.next = null;
        return pReverseNode;
    }

 

 

 

24、反转链表

原文:https://www.cnblogs.com/Aug-20/p/11817118.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!