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

  • 相关阅读:
    数据存储过程学习
    Python实现目录文件扫描功能
    python关于邮件发送包smtplib的实践分享
    Java自学笔记之学生管理系统
    Java自学笔记
    Java自学笔记1206
    java自学笔记
    Django常用命令
    django+SQLite搭建轻量级个人博客(六)数据校验
    django+SQLite搭建轻量级个人博客(五)分页
  • 原文地址:https://www.cnblogs.com/Adam-Ye/p/13466258.html
Copyright © 2020-2023  润新知