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、首先要把思路搞清楚,多画图.

  • 相关阅读:
    【AS3代码】AS调用JS
    【AS3代码】MP3音乐的播放/暂停/设定音量大小
    【AS3代码】在上下文菜单(右键菜单)中添加自定义项
    【AS3代码】更换鼠标箭头样式,并跟随鼠标!
    【AS3代码】创建动态文本
    【AS3代码】播放FLV视频流的三步骤!
    【AS3代码】Timer计时器用法
    【AS3代码】指定间隔时间运行函数 及 停止运行函数
    【AS3代码】Keyboard键盘操作!
    多线程_传送带我们到底能走多远系列(6)
  • 原文地址:https://www.cnblogs.com/Adam-Ye/p/13466258.html
Copyright © 2011-2022 走看看