美文网首页
反转算法

反转算法

作者: 有你我就不孤单 | 来源:发表于2020-05-30 16:36 被阅读0次

话不多说,直接上代码

通过栈的方式

 public class ShowMeBug {


    public static ListNode inverseListNode(ListNode listNode){
        if(listNode == null ||listNode.nextNode == null){
            return listNode;
        }

        ListNode tmp = listNode;
        Stack<ListNode> listNodes = new Stack<>();
        listNodes.add(tmp);
        while( (tmp = tmp.nextNode)!=null){
            listNodes.add(tmp);
        }


        ListNode next = null;
        ListNode current = listNodes.pop();
        ListNode first = current;

        while(!listNodes.isEmpty() && (next = listNodes.pop())!=null){
            current.nextNode = next;
            current = next;
        }
        //最后一个节点必须指向空。
        next.nextNode = null;
        return first;
    }

    public static void main(String[] args) {
        ListNode listNode1 = new ListNode(1,null);
        ListNode listNode2 = new ListNode(2,listNode1);
        ListNode listNode3 = new ListNode(3,listNode2);
        ListNode listNode4 = new ListNode(4,listNode3);
        ListNode result = inverseListNode(listNode4);
        System.out.println("111");

    }

    static class ListNode{
        public int value;
        public ListNode nextNode;
        public ListNode(int value,ListNode listNode){
            this.value = value;
            this.nextNode = listNode;
        }

    }

}

也可以通过数组或双向队列实现

public class ShowMeBug {


    public static ListNode inverseListNode(ListNode listNode){
        if(listNode == null ||listNode.nextNode == null){
            return listNode;
        }


        ListNode tmp = listNode;
        Deque<ListNode> listNodes = new ArrayDeque<ListNode>();
        listNodes.add(tmp);
        while( (tmp = tmp.nextNode)!=null){
            listNodes.add(tmp);
        }


        ListNode next = null;
        ListNode current = listNodes.pollLast();
        ListNode first = current;

        while(!listNodes.isEmpty() && (next = listNodes.pollLast())!=null){
            current.nextNode = next;
            current = next;
        }
        //最后一个节点必须指向空。
        next.nextNode = null;
        return first;
    }

    public static void main(String[] args) {
        ListNode listNode1 = new ListNode(1,null);
        ListNode listNode2 = new ListNode(2,listNode1);
        ListNode listNode3 = new ListNode(3,listNode2);
        ListNode listNode4 = new ListNode(4,listNode3);
        ListNode result = inverseListNode(listNode4);
        System.out.println("111");

    }

    static class ListNode{
        public int value;
        public ListNode nextNode;
        public ListNode(int value,ListNode listNode){
            this.value = value;
            this.nextNode = listNode;
        }

    }

}

相关文章

  • iOS面试之算法大全

    算法 算法内容如下: 字符串反转 链表反转 有序数组合并 Hash算法 查找两个子视图的共同父视图 求无序数组当中...

  • iOS面试之算法模块

    算法 算法内容如下: 字符串反转 链表反转 有序数组合并 Hash算法 查找两个子视图的共同父视图 求无序数组当中...

  • 数据结构 - 单向链表及相关算法

    单向链表 链表常见算法 链表反转

  • 反转算法

    话不多说,直接上代码 通过栈的方式 也可以通过数组或双向队列实现

  • [iOS面试]第11章 算法相关面试问题

    注意:本文主讲算法相关面试问题,包括字符串反转、链表反转、有序数组合并、Hash算法、查找两个子视图的共同父视图、...

  • 第一次

    ... 谈谈现在使用的项目的技术, retrofit 动态代理 怎么理解 注解 算法: 链表反转 m n 中间的反转

  • 算法-链表反转

    leecode 206链表反转:https://leetcode-cn.com/problems/reverse-...

  • 算法:反转链表

    问题1: 整体链表反转假设存在链表 1 → 2 → 3 → Ø,我们想要把它改成 Ø ← 1 ← 2 ← 3。 在...

  • 算法

    字符串反转 给定字符串"hello, world",实现将其反转。 链表反转 有序数组合并 Hash算法 在一个字...

  • iOS常用算法

    算法: 1、字符串反转2、链表反转3、有序数组合并4、hash算法5、查找两个自视图的共同父视图6、求无序数组当中...

网友评论

      本文标题:反转算法

      本文链接:https://www.haomeiwen.com/subject/fghhzhtx.html