剑指-合并两个排序链表-双指针

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

思路

创建单链表时,一般都会建一个伪头结点,也称哑结点(dummy node)。如此是为了所有节点都保证有前驱结点。

关于哑结点的使用
可以引用一个cur指针指向dum,操作cur进行移动来完成所求链表的创建,最后返回dum.next即所求链表。

此题思路是使用双指针遍历两链表,根据大小关系确定节点添加顺序,两节点指针交替前进,直至遍历完毕。

代码

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    
    
    public ListNode Merge(ListNode list1,ListNode list2) {
    
    
        ListNode dum = new ListNode(-1);
        ListNode cur = dum;
        
        while(list1!=null && list2!=null){
    
    
            if(list1.val <= list2.val){
    
    
                cur.next = list1;
                list1 = list1.next;
            }
            else{
    
    
                cur.next = list2;
                list2 = list2.next;
            }
            cur = cur.next;
        }
        
        if(list1!=null){
    
    
            cur.next = list1;
        }
        else{
    
    
            cur.next = list2;
        }
        return dum.next;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_32301683/article/details/108470788