题解 | #反转链表#
反转链表
http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
题目
思路
注释部分为我自己的思考,但是出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; } }