import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 合并两个有序链表
* @param pHead1 第一个有序链表的头节点
* @param pHead2 第二个有序链表的头节点
* @return 合并后有序链表的头节点
*/
public ListNode Merge (ListNode pHead1, ListNode pHead2) {
// 处理空链表情况
if (pHead1 == null) return pHead2;
if (pHead2 == null) return pHead1;
// 创建哑节点,简化头节点处理
ListNode dummy = new ListNode(0);
ListNode current = dummy;
// 双指针遍历两个链表,按值大小合并
while (pHead1 != null && pHead2 != null) {
if (pHead1.val <= pHead2.val) {
current.next = pHead1; // 链接较小的节点
pHead1 = pHead1.next; // 移动对应链表的指针
} else {
current.next = pHead2;
pHead2 = pHead2.next;
}
current = current.next; // 移动当前合并链表的指针
}
// 链接剩余未遍历的节点(其中一个链表已遍历完)
current.next = (pHead1 != null) ? pHead1 : pHead2;
return dummy.next; // 哑节点的下一个是合并后的头节点
}
}