题目

题目

思路

注释部分为我自己的思考,但是出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;
    }
}