1.题目描述
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
数据范围: 10000≤n≤1000,−1000≤节点值≤1000
要求:空间复杂度 O(1),时间复杂度 O(n)

2.题目分析
这道题,我们首先会想到的是,遍历两个链表的节点,谁的值小,就往后连.所以,这里有一个问题,要连在谁的后面呢?
由于谁的值更小是不确定的,所以,为了避免头结点不确定的情况,我们这里定义一个节点newHead1,谁的值小,就直接连在newHead后面.这样,返回头结点时,就返回newHead.next就行.
ListNode newHead = new ListNode(-1);
之后,就谁的值小,谁就往newHead后面连即可.
由于newHead不能改变,所以定义一个tmp去把值小的节点连到后面
ListNode tmp = newHead;
while(head1 != null && head2 != null){
if(head1.val <= head2.val){
tmp.next = head1;
head1 = head1.next;
}else{
tmp.next = head2;
head2 = head2.next;
}
tmp = tmp.next;
}
最后,看谁的

本文讲解了如何通过迭代方式合并两个递增链表,保持新链表递增排序,同时实现空间复杂度为O(1)和时间复杂度为O(n)的高效算法。关键步骤包括创建新头节点newHead,用tmp辅助连接节点,根据节点值大小决定连接方向。
最低0.47元/天 解锁文章
608





