AdamDuncan

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

最容易想到的方式就是使用Stack,但是牛客网限制时间导致不能使用栈,所以使用了临时变量,只用一次遍历就可以得到最终结果,代码如下:

package com.example;
class ListNode {
int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode first = head;
ListNode cur = head;
while (cur.next != null) {
//记住目前第二位的值
ListNode curNext = cur.next;
//System.out.println(curNext.val);
//目前的第三位变成第二位
cur.next = cur.next.next;
//System.out.println(cur.next.val);
//第二位-》第一位
curNext.next = first;
//System.out.println(curNext.next.val);
//指向改变之后的第一位
first = curNext;
//System.out.println(first.val);

//这里已经在队首插入了一个元素,相当于整体移动了一位,
//不用将当前的位置向后移动了
/*cur = cur.next;
System.out.println(cur.val);
*/
}
return first;
}
public static void main(String []args) {
ListNode node = new ListNode(1);
node.next = new ListNode(2);
node.next.next = new ListNode(3);
node.next.next.next = new ListNode(4);
Solution soluttion = new Solution();
System.out.print(soluttion.ReverseList(node).val);
}
}

posted on 2017-08-21 00:38  AdamDuncan  阅读(148)  评论(0编辑  收藏  举报