Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

反转链表

力扣题号206 反转链表

题目描述:

1
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
1
2
3
4
5
6
7
8
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

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

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

这道题的解决方式有很多,最简单的就是在创建一个新的链表,逆序赋值,或者利用一个栈,但是这样属于外门邪道了,要求是不额外申请新的空间。

ListNode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
}
}
双指针法
双指针
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public ListNode reverseList(ListNode head) {
ListNode temp;
ListNode cur = head;
ListNode pre = null;
while (cur != null){
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
}
递归

递归法理解起来比较负责,不过反转的思路是和双指针一样的

递归法
1
2
3
4
5
6
7
8
9
10
11
12
13
 public ListNode reverseList(ListNode head) {
return reverse(null,head);

}
public ListNode reverse(ListNode pre,ListNode curr){
if (curr == null){
return pre;
}
ListNode temp = null;
temp = curr.next;
curr.next = pre;
return reverse(curr, temp);
}

评论