1.题目
2.解题思路(一)
建立一个新的头节点,将原先链表上从头到尾的节点依次使用头插法插到新的头节点上
class Solution {
public ListNode reverseList(ListNode head) {
ListNode first = new ListNode(0);
ListNode temp1 = head;
ListNode temp2 = first;
while(temp1 != null) {
ListNode next = temp1.next;
temp1.next = temp2.next;
temp2.next = temp1;
temp1 = next;
}
return first.next;
}
}
3.解题思路(二)
利用栈的先进后出
class Solution {
public ListNode reverseList(ListNode head) {
Stack<Integer> stack = new Stack<Integer>();
ListNode temp1 = head;
while(temp1 != null) {
stack.push(temp1.val);
temp1 = temp1.next;
}
ListNode temp2 = head;
while(!stack.isEmpty()) {
temp2.val = stack.pop();
temp2 = temp2.next;
}
return head;
}
}
4.官方的递归解法
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) return head;
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}
作者:LeetCode
链接:https://leetcode-cn.com/problems/reverse-linked-list/solution/fan-zhuan-lian-biao-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
解释来源于leetcode用户