反转链表
反转链表
http://www.nowcoder.com/questionTerminal/75e878df47f24fdc9dc3e400ec6058ca
AC代码如下:这里利用了栈,其实还可以用数组会更快。就是先把链表所有的数取出并压入栈中,再弹出构造链表,利用了栈的先进后出翻转特性。具体步骤的作用都写在代码里了,不再赘述
import java.util.Stack;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head==null)
return null;
Stack<Integer> stack=new Stack();//整数栈
stack.add(head.val);
while(head.next!=null)
{
head=head.next;
stack.add(head.val);
}
ListNode ans=new ListNode(stack.pop());//因为上面链表非空,所以栈至少有一个元素
ListNode a=ans;//用一个指针来指向结果链表的最后一个结点
while(!stack.isEmpty()) //当栈非空,表明还可以构建链表的节点
{
ListNode temp=new ListNode(stack.pop()); //新建节点
a.next=temp; //结果链表的最后一个结点替换为上面新建节点
a=a.next; //并且把最后节点的指针往后移动一个节点
}
return ans;
}
} 