Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Example:
Input: [ 1->4->5, 1->3->4, 2->6 ] Output: 1->1->2->3->4->4->5->6
/** * Definition for singly-linked list. */ struct ListNode { int val; struct ListNode *next; }; struct ListNode* mergeKLists(struct ListNode** lists, int listsSize) { struct ListNode * head = NULL; struct ListNode * p = NULL; struct ListNode * q = NULL; int i=0; int j=0; while(1) { for(i=0; i<listsSize; i++) { if(p == NULL || (lists[i] != NULL && p->val > lists[i]->val)) { p = lists[i]; j = i; } } if(p == NULL) break; if(head == NULL) { head = p; q = p; p = NULL; lists[j] = lists[j]->next; continue; } q->next = p; q = q->next; p = NULL; lists[j] = lists[j]->next; } return head; }
坑爹,在判断head == NULL的代码块中忘了移向下一个节点,导致lists[j]->next就是lists[j]。