题解 | #反转链表#

反转链表

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;

    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务