给你单链表的头节点 $head$ ,请你反转链表,并返回反转后的链表。

示例 1:


1
2
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:


1
2
输入:head = [1,2]
输出:[2,1]

示例 3:

1
2
输入:head = []
输出:[]

提示:

  • 链表中节点的数目范围是 $[0, 5000]$
  • $-5000 <= Node.val <= 5000$

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 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) {
ListNode pre = null;
ListNode p = head;
while(p!=null){
ListNode next = p.next;
p.next=pre;
pre=p;
p=next;
}
return pre;
}
}

这个我一开始没做出来,看了题解才会,呜呜呜。