206.反转链表
题目描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例1
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例2
输入:head = [1,2]
输出:[2,1]
示例3
输入:head = []
输出:[]
提示
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
代码演示
Java 递归方法
public class OneQuestionPerDay206 {
public static void main(String[] args) {
ListNode fifth = new ListNode(5);
ListNode fourth = new ListNode(4,fifth);
ListNode third = new ListNode(3,fourth);
ListNode second = new ListNode(2,third);
ListNode head = new ListNode(1,second);
ListNode p = head;
for (int i = 0;i < 5; i++) {
System.out.println(p.val);
p = p.next;
}
Solution s = new Solution();
ListNode newhead = s.reverseList(head);
p = newhead;
for (int i = 0;i < 5; i++) {
System.out.println(p.val);
p = p.next;
}
}
}
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;
}
}
Java 提交结果
执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户
内存消耗:38.4 MB, 在所有 Java 提交中击败了29.10% 的用户
迭代方法参见(C语言)
链接: LeetCode 剑指 Offer 24.反转链表.