题目链接:LeeCode206反转链表
题目描述:
递归:
递归到最底层,再往回拼,很简单
/**
* 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 {
private static ListNode rhead;
private static ListNode temp;
public static ListNode reverseList(ListNode head) {
rhead=new ListNode();
temp=rhead;
deep(head);
return rhead.next;
}
public static void deep(ListNode head){
//System.out.println(head.val);
if(head==null)return;
deep(head.next);
temp.next=head;
temp=temp.next;
temp.next=null;
}
}
迭代:
用一个栈直接反转往回拼
/**
* 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 static ListNode reverseList(ListNode head) {
if(head==null||head.next==null)return head;
Stack<ListNode> stack=new Stack<>();
while (head!=null){
//System.out.println(head.val);
stack.push(head);
head=head.next;
}
head=stack.pop();
ListNode node=head;
while (!stack.isEmpty()) {
node.next=stack.pop();
node=node.next;
node.next=null;
}
return head;
}
}