题目描述:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例2:
输入:l1 = [], l2 = []
输出:[]
示例3:
输入:l1 = [], l2 = [0]
输出:[0]
解题思路:
我们可以依次比较两个链表的节点值大小,若l1的节点值小于等于l2的节点值,我们就让l1的next指针指向当前的l2的节点值,若l1的节点值大于l2的节点值,我们就让l2的next指针指向当前l1的节点,然后依次迭代下去。我们应该注意到迭代比较时,应保证l1与l2均不为空,当其中一个为空时,我们就可以直接将它的next指针指向另一个当前的节点(因为题目已经说明是两个升序数组!!!)
代码块
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
//定义结果链表
ListNode res = new ListNode();
//定义cur指针用于实现变换节点指向操作
ListNode cur = res;
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 = cur.next;
}
//存在某一个为空时
//直接将cur的next指针指向另一个链表
if (list1 == null) {
cur.next = list2;
}
if (list2 == null) {
cur.next = list1;
}
return res;
}
部分代码解读:
//定义cur指针用于实现变换节点指向操作
ListNode cur = res;
在计算机的链式存储中,当我们将头节点的指针告诉计算机时,就会从头节点的指针依次将后面存储的数据读出,所用我们在很多的链表操作中会定义一些辅助指针,帮助我们实现链表中的一些操作!!!
做题感悟:
链表中的变换指针指向的问题很容易出现*空指针异常!!!*在实现相关的操作时,可以考虑定义辅助指针合理地帮助我们完成相关操作…