简单的题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
这题的解法是定义一个哨兵节点(哨兵节点是一种不保存任何数据的节点,用法非常灵活,一般被用来标识数据结构的头尾或没有节点的情况。)
利用定义的指针进行操作,进入循环后,比较两个数值的大小,将比较小的节点定义为哨兵节点的下一个结构体,并将指针和节点向后移动,方便下一次的使用。
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode prehead = new ListNode(0); //新建哑节点,值为0
ListNode pre = prehead;
while(l1!=null&&l2!=null){
if(l1.val>l2.val){
//将指针指向比较小的节点
pre.next = l2;
//并将指针和节点向后移动
pre = pre.next;
l2 = l2.next;
}
else{
pre.next = l1;
pre = pre.next;
l1 = l1.next;
}
}
//一个为空,那么就直接指向不为空的链表
if(l1==null){
pre.next = l2;
}
else{
pre.next=l1;
}
return prehead.next;
}
}
结束的时候直接忽略哨兵节点,将节点指向下一位即可。