题目描述
输入一个链表,反转链表后,输出新链表的表头。
解题思路:
通过栈的特点来解决这道题:
首先将链表中的元素分别压栈,然后让元素分别出栈并进行反转;
最后返回新的链表的表头。
/*
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) {
Stack<ListNode> stack = new Stack();
if(head == null){
return null;
}
while(head != null){
stack.push(head);
head = head.next;
}
ListNode re_head=stack.peek();
ListNode data=re_head;
stack.pop();
while(!(stack.empty())){
data.next=stack.peek();
stack.pop();
data = data.next;
}
data.next=null;
return re_head;
}
}
第二种解法:
首先遍历链表,将链表中的数值存到数组中,然后开始倒着遍历数组,让数组中的最后一个值成为反转链表的第一个节点。
/*
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) {
ArrayList<Integer> array = new ArrayList<Integer>();
if(head == null){
return null;
}
ListNode lt = head;
while(lt != null){
array.add(lt.val);
lt = lt.next;
}
lt = head;
for(int i = array.size()-1;i>=0;i--){
lt.val = array.get(i);
lt = lt.next;
}
return head;
}
}