反转链表

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

 

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
 

限制:

0 <= 节点个数 <= 5000

 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null || head.next==null)
            return head;
        
        ListNode cur=reverseList(head.next);
        head.next.next=head;
        head.next=null;
        return cur;
    }
}

解题思路:

主要是利用的递归的思想,栈的本质就是递归。

主要难点就是递归的出口以及翻转的条件

出口就是当链表为null 则结束;

翻转的条件很关键:head.next.next=head; 这句话可以利用三个数字进行验证。 比如 1,2,3 ;

posted on 2020-07-26 16:52  九七97  阅读(131)  评论(0编辑  收藏  举报

导航