zoukankan      html  css  js  c++  java
  • 剑指offer16题

    class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }
    
    /**
     * 目标:
     * 输入两个单调递增的链表,输出两个链表合成后的链表,
     * 当然我们需要合成后的链表满足单调不减规则。
     * <p>
     * 思路:
     * 1、新建一个表头
     * 2、比较list1和list2每个节点的值,把节点小的摘出来,拼接到新链表末尾
     *      一指:curr。next指向新节点
     *      二移:curr和链表同时往前移动
     *      三断:把curr。next切断,这样就可以递归了
     * 3、当其中一个链表到达末端就直接把另一链表加入到新链表末尾当中
     *
     * 代码:
     */
    public class Solution16 {
        public ListNode Merge(ListNode list1, ListNode list2) {
            if (list1 == null){
                return list2;
            }
            if (list2 == null){
                return list1;
            }
            /**
             * 1、新建一个表头
             */
            ListNode currNode = new ListNode(0);
            ListNode listNode = currNode;
            ListNode currNode1 = list1;
            ListNode currNode2 = list2;
    
            /**
             * 2、比较list1和list2每个节点的值,把节点小的摘出来,拼接到新链表末尾
             */
            while (null != currNode1 && null != currNode2) {
                if (currNode1.val < currNode2.val) {
                    // 一指:curr。next指向新节点
                    currNode.next = currNode1;
                    // 二移:curr和链表同时往前移动
                    currNode = currNode.next;
                    currNode1 = currNode1.next;
                    //三断:把curr。next切断
                    currNode.next = null;
                } else {
                    // 一指:curr。next指向新节点
                    currNode.next = currNode2;
                    // 二移:curr和链表同时往前移动
                    currNode = currNode.next;
                    currNode2 = currNode2.next;
                    //三断:把curr。next切断
                    currNode.next = null;
                }
            }
            /**
             * 3、当其中一个链表到达末端就直接把另一链表加入到新链表末尾当中
             */
            if (null != currNode1) {
                currNode.next = currNode1;
    
            }
            if (null != currNode2) {
                currNode.next = currNode2;
            }
            return listNode.next;
        }
    }

    小结:

    1、做递归题,首先找一个最基本的结构,并把结构传进一个函数,这个函数就是解决问题的通式.

    2、要有抽象的思维,逐层深入.

    3、首先要把思路搞清楚,多画图.

  • 相关阅读:
    LTE-TDD随机接入过程(3)-RAR(MSG2)以及MSG1的重传
    《javascript设计模式》读书笔记一(接口)
    数据结构——算法之(033)(两个有序单链表合并为一个有序的单链表)
    利用redis和php-resque实现后台任务
    最能毁掉程序猿健康的几件事
    springMVC4(11)使用注解完毕数据格式化
    Linux
    Linux
    Linux
    Fluent_Python_Part4面向对象,11-iface-abc,协议(接口),抽象基类
  • 原文地址:https://www.cnblogs.com/Adam-Ye/p/13466258.html
Copyright © 2011-2022 走看看