题目
思路
注释部分为我自己的思考,但是出bug了,还未找出来,于是采用了他人的思考。我的做法是从头结点开始,将当前结点的值存进以恶搞arrayList集合中,最后从右往左遍历这个集合,获取每个位置的值并创建一个结点ListNode,同时获取下一个集合的元素值,将ListNode.next=new ListNode(list.get(i-1))。与此同时定义一个存放结点的队列,将每一次创建的结点从队尾入队,最后返回的就是一开始入队的那一个结点,采用的是队列的pollFirst()方法。
他人的思考更加简单,简洁,参考他的。
代码
import java.util.*;
public class Solution {
public ListNode ReverseList(ListNode head) {
/*Deque<ListNode> d = new ArrayDeque<>();
ArrayList list = new ArrayList();
ListNode node = null;
if(head == null){
return node;
}else{
while(head != null){
list.add(head.val);
head = head.next;
}
for(int i=list.size()-1;i>-1;i--){
node = new ListNode((Integer)list.get(i));
d.addLast(node);
if(i > 0){
node.next = new ListNode((Integer)list.get(i-1));
}else{
node.next = null;
}
}
return d.pollFirst();
}*/
ListNode prev = null;
ListNode curr = head;
while (curr != null)
{
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
} 
京公网安备 11010502036488号