1. 问题描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
2. 解题思路
假设存在链表:
n1 -> n2 -> ... -> nk -> n_{k+1} -> ... -> nm
现在假设链表部分已经反转:
n1 -> n2 -> ... -> nk -> n_{k+1} <- ... <- nm
下一步反转操作:将
n
k
+
1
n_{k+1}
nk+1的后继节点指向
n
k
n_k
nk
则需要执行:nk.next.next = nk
特别注意最终的 n1 的后继节点要置为空。
3. 代码实现
/**
* 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) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = reverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
}