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; // 哑节点的下一个是合并后的头节点 } }