输入一个链表,反转链表后,输出新链表的表头。
1)
使用一个栈来实现:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.*;
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null || head.next == null){
return head;
}
Stack<ListNode> stack = new Stack<ListNode>();
ListNode pre = null;
while(head.next != null){
stack.push(head);
head = head.next;
}
pre = head;
while(!stack.isEmpty()){
head.next = stack.pop();
head = head.next;
}
head.next = null;
return pre;
}
}
2)使用递归的方式来实现
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode firstNode;
if(head==null)return null;
if(head.next==null){
firstNode=head;
return head;
}
ListNode q=head.next;
ListNode ph=ReverseList(q);
q.next=head;
head.next=null;
return ph;
}
}