题解 | #反转链表#
反转链表
http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
首先是想到栈的功能可以实现先进后出来进行反转,将要反转
的链表遍历进栈,然后通过栈弹出元素到新的链表上然后返回
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.*;
public class Solution {
public ListNode ReverseList(ListNode head) {
//新建一个链表的头为root,建立了个地址
ListNode root =new ListNode(0);
//nextNode指向改头结点的地址
ListNode nextNode = root;
if(head == null || head.next==null){
return head;
}
// 用来创建子结点
int count=1;
// 如果head不是空的链表,建立一个栈,把head的每个结点的数据放到栈内
Stack<Integer> stack1=new Stack();
while(head!= null ){
stack1.push(head.val);
System.out.println(head.val);
head=head.next;
}
// 将栈的值弹出到我的反转链表中
while(stack1.size()!=0){
// 创建新的子系欸但
ListNode node=new ListNode(count);
// 子结点指向下一个 位置,也就是绑定下一个结点是node
nextNode.next=node;
// 父结点移动到下下个位置
nextNode=nextNode.next;
// 给子结点赋值
node.val=stack1.pop();
count++;
}
return root.next;
}
} 