class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode* p = list1;
ListNode* q = list2;
ListNode* ans = new ListNode(-1,list1!=NULL?list1:list2);
ListNode* ansp = ans;
while (p && q)
{
if (p->val >= q->val)
{
ans->next = q;
ans = ans->next;
q = q->next;
}
else {
ans->next = p;
ans = ans->next;
p = p->next;
}
}
if (p)
{
ans->next = p;
}
if (q)
{
ans->next = q;
}
return ansp->next;
}
}
其中包含一个名为 mergeTwoLists 的公共方法,用于合并两个已排序的链表。该方法接受两个参数 list1 和 list2,返回一个合并后的链表。
方法内部创建了两个指针 p 和 q,分别指向 list1 和 list2 的头节点。接着,创建一个新链表 ans,并将 ans 的头节点设为 -1,表示新链表中不包含头节点。同时,创建一个指针 ansp 指向 ans 的头节点,用于后续修改。
接下来,在 while 循环中,使用指针 p 和 q 遍历两个链表。如果当前节点的值大于等于另一个节点的值,则将当前节点的下一个节点设为另一个节点,并将 ans 的指针向后移动,直到其中一个链表遍历完毕。如果当前节点的值小于另一个节点的值,则将当前节点的下一个节点设为当前节点,并将 ans 的指针向后移动,直到其中一个链表遍历完毕。最后,当其中一个链表遍历完毕时,需要将 ansp 的指针指向其最后一个节点,表示新链表中不包含两个链表的尾节点,只包含剩余节点。
最后,方法返回 ansp 的指针 next,表示合并后的链表的头节点。如果 list1 或 list2 为空,则 next 指向 ans 的头节点。