1.使用栈
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public ListNode ReverseList (ListNode head) {
/**
* 使用栈
*/
if (head == null){
return null;
}
// write code here
Stack<ListNode> nodes = new Stack<>();
ListNode pos = head;
while (pos!=null){
nodes.push(pos);
pos = pos.next;
}
ListNode newHead = nodes.pop();
pos = newHead;
while (!nodes.empty()){
pos.next = nodes.pop();
pos = pos.next;
}
pos.next = null;
return newHead;
}
2.使用双链表
public ListNode ReverseList2 (ListNode head) {
/**
* 双链表
*/
if (head == null){
return null;
}
//定义一个新链表
ListNode newHead = null;
while (head!=null){
ListNode temp = head.next;
head.next = newHead;
newHead = head;
head = temp;
}
return newHead;
}
3.使用递归
public ListNode ReverseList3 (ListNode head) {
/**
* 递归
*/
if (head == null || head.next == null){
return head;
}
ListNode next = head.next;
ListNode listNode = ReverseList3(next);
next.next = head;
head.next = null;
return listNode;
}