LeetCode206.链表翻转
链表的翻转是一个比较基础的问题,有3种解法,分别是①通过栈先入后出的特性②迭代③递归
栈解法
class Solution {
public ListNode reverseList(ListNode head){
Stack<ListNode> stack = new Stack<>();
ListNode temp = head;
while(temp != null){
stack.push(new ListNode(temp.val));
temp = temp.next;
}
temp = stack.pop();
ListNode NewHead = temp;
while(!stack.isEmpty()){
temp.next = stack.pop();
temp = temp.next;
}
return NewHead;
}
}
迭代法
class Solution {
public ListNode reverseList(ListNode head){
ListNode cur = head;
ListNode pre = null;
ListNode temp = null;
while(cur != null){
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
}
递归法
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;
}
}