给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
题解1
/**
* 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 cur = head;
ListNode prev = null;
ListNode temp = null;
while(cur!=null) {
temp = cur.next; // 临时节点
cur.next = prev; // 把当前节点的下一个节点变为null
prev = cur; // 前一个节点指向当前节点
cur = temp; // 当前一个节点变为下一个节点
}
return prev;
}
}
题解2
/**
* 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) {
return reverse(null, head);
}
public ListNode reverse(ListNode prev, ListNode cur) {
if(cur == null){ // 递归结束的条件
return prev;
}
ListNode temp = null; // 临时节点
temp = cur.next; // 指向下一个节点
cur.next = prev; // 当前节点的下一个的反转
return reverse(cur, temp); // 返回头结点
}
}