1.题目描述
2.思路
思路一:
ListNode是类,new ListNode(0)实例化 一个 ListNode 对象,并使用构造函数 ListNode(0) 来初始化该对象。dummy 是一个变量名,它是我们定义的链表节点的引用。这个变量会指向新创建的 ListNode 对象。
思路2:
3.java代码
方法一:有虚拟头节点
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
// 创建一个虚拟头节点
ListNode first=new ListNode(0);
ListNode current=first;
// current 用于指向合并链表的最后一个节点
while(list1!=null&&list2!=null)
//val 是一个 int 类型的变量,int 是基本数据类型,不可能为 null。正确的判断应该是 list1 != null && list2 != null,即判断链表本身是否为空。
{
if(list1.val<list2.val)
{
current.next=list1;
list1=list1.next;
}
else
{
current.next=list2;
list2=list2.next;
}
//合并列表排列完, current移动到合并链表的最后一个节点
current=current.next;
}
if(list1!=null)
{
current.next=list1;
}
if(list2!=null)
{
current.next=list2;
}
//题目要求:返回虚拟头节点的下一节点,即合并后的链表头
return first.next;
}
}
方法2:没有虚拟头节点