题目描述
输入一个链表,反转链表后,输出链表的所有元素。
方法1:用ArrayList
遍历节点存入list中,然后遍历从后输出其节点。
【运行时间:17ms 占用内存:8660k】
import java.util.ArrayList;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
ArrayList<Integer> list=new ArrayList<Integer>();
if(head==null) return null;
ListNode node=new ListNode(-1);
ListNode resNode=node;
while(head!=null){
list.add(head.val);
head=head.next;
}
for(int i=list.size()-1;i>=0;i--){
node.next=new ListNode(list.get(i));
node=node.next;
}
return resNode.next;
}
}
方法2:依次交换位置
【运行时间:23ms 占用内存:8664k】
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode pre=null;
ListNode next=null;
while(head!=null){
next=head.next;
head.next=pre;
pre=head;
head=next;
}
return pre;
}
}
方法3:递归
【运行时间:21ms 占用内存:8532k】
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head==null||head.next==null) return head;
ListNode pre=ReverseList(head.next);
head.next.next=head;
head.next=null;
return pre;
}
}
方法4:用栈来实现
【运行时间:26ms 占用内存:8516k】
import java.util.*;
public class Solution {
public ListNode ReverseList(ListNode head) {
Stack<ListNode> stack=new Stack<ListNode>();
if(head==null) return head;
while(head!=null){
stack.push(head);
head=head.next;
}
ListNode node=new ListNode(-1);
ListNode n=node;
while(!stack.isEmpty()){
n.next=new ListNode(stack.pop().val);
n=n.next;
}
return node.next;
}
}