LeetCoder 23. Merge k Sorted Lists

来源:互联网 发布:udp服务端保存数据 编辑:程序博客网 时间:2024/06/03 10:52

题意

合并n个有序链表

思路

解法一:
n个链表依次和结果链表合并,直到合并完成

解法二:
优先队列,即priority_queue,将链表中的数一次加入到优先队列中,因为默认的优先队列是按照从大到小顺序的,所以说最后需要反转链表.

代码

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    priority_queue<int>q;    ListNode* mergeKLists(vector<ListNode*>& lists) {        size_t len = lists.size();        for(size_t i = 0; i < len;i++){            ListNode *head = lists[i];            while(head != NULL){                q.push(head->val);                head = head->next;            }        }        ListNode *head = new ListNode(0);        ListNode *temp = head;        while(!q.empty()){            temp->next = new ListNode(q.top());            q.pop();            temp = temp->next;        }        temp->next = NULL;        head = head->next;        temp = NULL;        while(head != NULL && head->next != NULL){            ListNode *p = head->next;            head->next = temp;            temp = head;            head = p;        }        if(head != NULL)        head->next = temp;        return head;    }};
原创粉丝点击