1. 程式人生 > >LeetCode 21 ——合併兩個有序連結串列

LeetCode 21 ——合併兩個有序連結串列

1. 題目

21

2. 解答

  • 新建一個帶有哨兵結點的連結串列,依次比較兩個有序連結串列的結點值,將較小值的結點插入到新連結串列後面。直到其中一個比較完畢,將另一個連結串列剩餘的結點全部放到新連結串列最後面即可。最後,可以刪除哨兵結點,或者直接返回哨兵結點後第一個結點指標。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode *head = new ListNode(0); // 新建哨兵結點,方便操作 ListNode *temp = head; // 依次比較兩個連結串列的結點值,將值較小的結點插入到新建的連結串列後面 while(l1 && l2) { if (l2->val <= l1->val)
{ temp->next = l2; temp = temp->next; l2 = l2->next; } else { temp->next = l1; temp = temp->next; l1 = l1->next; } } // 其中一個連結串列比較完畢,將另外一個連結串列剩餘結點直接插入到新建的連結串列後面
if (l1) { temp->next = l1; } else { temp->next = l2; } temp = head; head = head->next;// 刪除哨兵結點 delete(temp); return head; } };

獲取更多精彩,請關注「seniusen」! seniusen