赞
踩
- 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 的头节点。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。