反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 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 ;