题目描述
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
做题思路
由于l1和l2是递增的,因此使用双指针遍历两个链表,根据指针所指向的值的大小关系确定节点添加的顺序,两节点指针交替前进,直至遍历完毕。由于合并链表初始状态无节点,在第一轮循环时无法将节点添加到合并链表中,因此可以初始化一个辅助节点head作为合并链表的伪头节点,将各节点添加到head之后,最后返回head.next。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head=new ListNode(0);//设置合并链表的伪头节点
ListNode cur=head;//将当前节点进行初始化
//对l1和l2进行交替合并
while(l1!=null&&l2!=null){
if(l1.val<l2.val){
cur.next=l1;
l1=l1.next;
cur=cur.next;
}else{
cur.next=l2;
l2=l2.next;
cur=cur.next;
}
}
//处理末尾节点
if(l1!=null){
cur.next=l1;
}else{
cur.next=l2;
}
return head.next;
}
}