zoukankan      html  css  js  c++  java
  • Java 链表反转

    链表数据结构如下:

    /**
     * Definition for ListNode.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int val) {
     *         this.val = val;
     *         this.next = null;
     *     }
     * }
     */ 

    给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null

    反转链表思路:将当前链表放入stack 利用stack的特性LIFO做反转,需要注意的是stack中最后一个元素时需要讲next节点设置为null,否则后指向原始链表的第二个节点,

    代码如下

    public class Solution {
        /**
         * @param head: The head of linked list.
         * @return: The new head of reversed linked list.
         */
        public ListNode reverse(ListNode head) {
            if(head==null){
                return null;
            }
            Stack<ListNode> stack = new Stack<>();
    
            while(head!=null){
                stack.push(head);//链表元素入栈
                head=head.next;
            }
    
            ListNode current =stack.pop(); //获得头节点
            ListNode root = current;
            while (!stack.isEmpty()){
            ListNode next = stack.pop();
    
                //最后一个元素时处理next为null
                if(stack.size()==0){
                    next.next=null;
                    current.next=next;
                }else{
                    current.next=next;
                    current=next;
                }
    
            }
    
            return root;
        }
    }
  • 相关阅读:
    tomcat安装配置
    Java的jdk环境变量配置
    我为什么在这里写博客
    函数
    java的内部类解析
    常用集合
    java数据类型总结
    Java总结基础知识
    线程的状态和方法
    java对象序列化的理解
  • 原文地址:https://www.cnblogs.com/lilefordream/p/7084413.html
Copyright © 2011-2022 走看看