力扣21—合并两个有序链表(思路+代码)

发布于:2023-01-15 ⋅ 阅读:(448) ⋅ 点赞:(0)

合并两个有序链表

思路:题目要求 将两个有序链表合并成新的有序链表
1.先创建一个新的链表,创建头结点方便尾插元素
2.遍历两个有序链表,比较两个链表的val值,较小的一个放入新链表中
3.返回新链表

class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        if(null == list1 && null == list2){
            return null;
        }
        //其中一个链表为空,返回另一个链表
        if(null == list1){
            return list2;
        }
        if(null == list2){
            return list1;
        }
        
        ListNode ListA = new ListNode(0);//创建新链表
        ListNode ListAhead = ListA;//新链表 头节点
        ListNode cur1 = list1;
        ListNode cur2 = list2;
        while(null != cur1 && null != cur2){//遍历两个链表 较小值放到新链表里
            if(cur1.val < cur2.val){
                ListAhead.next = cur1;//增加新节点
                cur1 = cur1.next;//节点后移
            }else{
                ListAhead.next = cur2;
                cur2 = cur2.next;
            }
            //头结点后移 尾插法结束
            ListAhead = ListAhead.next;
        }
        //结束后 一定有一个或者两个链表遍历完了 把没遍历完的链表 接在新链表后面 否则不进入if else
        if(null == cur1){
            ListAhead.next = cur2;
        }else{
            ListAhead.next = cur1;
        }
      return ListA.next;//跳过元素为0的头结点
        }
    }

运行结果:
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到