1. 题目:(翻转列表)
题目: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
2. 示例
3. 解答步骤
java解答:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
// 1.通过递归的方式去做
// 假如当前链表为空或者递归结束(递归到最后一项)直接返回head
if (head == null || head.next == null) {
// 到递归的最后一次时,直接返回最后一个的地址
return head;
}
// 保存当前的节点的下一个节点 (因为递归语句在下面,这里是正序执行的)
ListNode next = head.next;
// 从当前节点的下一个节点 继续递归
ListNode reverseNext = reverseList(next);
// 由于next保存的是下一个的地址
// 所以 这里的意思就是: 我下一个的地址指向我
// 由于 递归是到达终止条件后 在最后一个开始向回执行
// 由于最后一个直接返回head, 所以倒数第二个开始,它的下一个就是它本身, 这个就是翻转了
next.next = head;
// 但是到第一个结点的时候, 它本身(head)的next 是 null
head.next = null;
return reverseNext;
}
}