Cover image for Interview Classic 150 Problem P21: Merge Two Sorted Linked Lists

Interview Classic 150 Problem P21: Merge Two Sorted Linked Lists


Timeline

Timeline

2025-11-19

init

linked list

Problem:

You can first create a head node to facilitate tail insertion, and then release it at the end.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
struct ListNode {	int val;	ListNode *next;	ListNode()		: val(0)		, next(nullptr)	{	}	ListNode(int x)		: val(x)		, next(nullptr)	{	}	ListNode(int x, ListNode *next)		: val(x)		, next(next)	{	}};class Solution {    public:	ListNode *mergeTwoLists(ListNode *list1, ListNode *list2)	{		// Create a head node		ListNode *list3_head = new ListNode;		ListNode *p = list3_head;		while (list1 != nullptr || list2 != nullptr) {			if (list1 == nullptr && list2 != nullptr) {				p->next = list2;				list2 = list2->next;				p = p->next;				p->next = nullptr;			} else if (list1 != nullptr && list2 == nullptr) {				p->next = list1;				list1 = list1->next;				p = p->next;				p->next = nullptr;			} else if (list1 != nullptr && list2 != nullptr) {				if (list1->val <= list2->val) {					p->next = list1;					list1 = list1->next;					p = p->next;					p->next = nullptr;				} else {					p->next = list2;					list2 = list2->next;					p = p->next;					p->next = nullptr;				}			}		}		p = list3_head;		list3_head = list3_head->next;		delete p;		return list3_head;	}};

leetcode hot100 rewrite

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode() : val(0), next(nullptr) {} *     ListNode(int x) : val(x), next(nullptr) {} *     ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */struct ListNode {        int val;        ListNode *next;        ListNode()                : val(0)                , next(nullptr)        {        }        ListNode(int x)                : val(x)                , next(nullptr)        {        }        ListNode(int x, ListNode *next)                : val(x)                , next(next)        {        }};class Solution {    public:        ListNode *mergeTwoLists(ListNode *list1, ListNode *list2)        {                ListNode *virtual_head = new ListNode;                ListNode *tail = virtual_head, *p;                while (list1 != nullptr || list2 != nullptr) {                        if (list1 && list2)                                tail->next = list1->val < list2->val ? list1 : list2;                        else                                tail->next = (list1 == nullptr) ? list2 : list1;                        if (tail->next == list1)                                list1 = list1->next;                        if (tail->next == list2)                                list2 = list2->next;                        tail = tail->next;                }                tail = virtual_head->next;                delete virtual_head;                return tail;        }};
Loading comments…