将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,且合并后新链表依然有序。

合并有序链表

http://www.nowcoder.com/questionTerminal/a479a3f0c4554867b35356e0d57cf03d

思路:本体没有要求必须使用交换元素的方式,即可以使用新的链表,这就简单多了!一开始陷进去是想不利用新的链表,将其排序整合,但是有些乱;
提示:处理头节点!

public class HeBingLinkedList {
    public static void main(String[] args) {
        //测试用
        ListNode l1 = new ListNode(2);
        l1.next = new ListNode(4);
        ListNode l2 = new ListNode(1);
        l2.next = new ListNode(3);

        ListNode listNode = mergeTwoLists(l1, l2);
        System.out.println(listNode);
    }

    public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        // 判断边缘条件
        if (null == l1) return l2;
        if (null == l2) return l1;
        //把头节点小的部分作为新的节点
        boolean l1AsHead = l1.val < l2.val;
        ListNode res = new ListNode(l1AsHead ? l1.val : l2.val);
        //值传递机制可知,temp 和 res 操作同一个对象,但是,res 是头,temp 是其中用来操作的一个动态节点
        ListNode temp = res;

        //如果 l1 作为了头节点,那么 cur1 就表示 l1 剩下的部分,依次比较两个链表未合并部分的头
        ListNode cur1 = l1AsHead ? l1.next : l1;

        ListNode cur2 = l1AsHead ? l2 : l2.next;
        while (null != cur1 && null != cur2) {

            l1AsHead = cur1.val < cur2.val;
            temp.next = new ListNode(l1AsHead ? cur1.val : cur2.val);
              //注意这里要用 temp 来对 res 下一节点进行赋值
            temp = temp.next;

            cur1 = l1AsHead ? cur1.next : cur1;
            cur2 = l1AsHead ? cur2 : cur2.next;
        }

        //如果其中一条链表遍历结束,那么另外一条有序链表的 未比较的部分直接加入 res 之后
        if (null == cur1) temp.next = cur2;
        if (null == cur2) temp.next = cur1;
        return res;
    }


    public static class ListNode {
        int val;
        ListNode next = null;

        public ListNode(int val) {
            this.val = val;
        }

        @Override
        public String toString() {
            return " " + val + " - > " + next;
        }
    }
}
全部评论

相关推荐

刚刷到字节跳动官方发的消息,确实被这波阵仗吓了一跳。在大家还在纠结今年行情是不是又“寒冬”的时候,字节直接甩出了史上规模最大的转正实习计划——ByteIntern。咱们直接看几个最硬的数,别被花里胡哨的宣传词绕晕了。首先是“量大”。全球招7000多人是什么概念?这几乎是把很多中型互联网公司的总人数都给招进来了。最关键的是,这次的资源分配非常精准:研发岗给了4800多个Offer,占比直接超过六成。说白了,字节今年还是要死磕技术,尤其是产品和AI领域,这对于咱们写代码的同学来说,绝对是今年最厚的一块肥肉。其次是大家最关心的“转正率”。官方直接白纸黑字写了:整体转正率超过50%。这意味着只要你进去了,不划水、正常干,每两个人里就有一个能直接拿校招Offer。对于2027届(2026年9月到2027年8月毕业)的同学来说,这不仅是实习,这简直就是通往大厂的快捷通道。不过,我也得泼盆冷水。坑位多,不代表门槛低。字节的实习面试出了名的爱考算法和工程实操,尤其是今年重点倾斜AI方向,如果你简历里有和AI相关的项目,优势还是有的。而且,转正率50%也意味着剩下那50%的人是陪跑的,进去之后的考核压力肯定不小。一句话总结:&nbsp;27届的兄弟们,别犹豫了。今年字节这是铁了心要抢提前批的人才,现在投递就是占坑。与其等到明年秋招去千军万马挤独木桥,不如现在进去先占个工位,把转正名额攥在手里。
喵_coding:别逗了 50%转正率 仔细想想 就是转正与不转正
字节7000实习来了,你...
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务