题解 | #合并两个排序的链表#
合并两个排序的链表
https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead1 ListNode类
* @param pHead2 ListNode类
* @return ListNode类
*/
struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) {
// write code here
struct ListNode* traversal1 = pHead1; //遍历pHead1的指针
struct ListNode* traversal2 = pHead2; //遍历pHead2的指针
struct ListNode* last = NULL;
if(pHead1 == NULL) //当链表1不存在时
{
return pHead2;
}
if(pHead2 == NULL) //当链表2不存在时
{
return pHead1;
}
if(traversal1->val<traversal2->val) //确定链表头结点,返回头结点
{
last = traversal1;
traversal1 = traversal1->next;
while(1)
{
if(traversal1 == NULL) //链表1遍历完成
{
last->next = traversal2;
return pHead1;
}
if(traversal2 == NULL) //链表2遍历完成
{
last->next = traversal1;
return pHead1;
}
if(traversal1->val<traversal2->val)
{
last->next = traversal1;
last = traversal1;
traversal1 = traversal1->next;
}
else
{
last->next = traversal2;
last = traversal2;
traversal2 = traversal2->next;
}
}
}
else
{
last = traversal2;
traversal2 = traversal2->next;
while(1)
{
if(traversal1 == NULL)
{
last->next = traversal2;
return pHead2;
}
if(traversal2 == NULL)
{
last->next = traversal1;
return pHead2;
}
if(traversal1->val<traversal2->val)
{
last->next = traversal1;
last = traversal1;
traversal1 = traversal1->next;
}
else
{
last->next = traversal2;
last = traversal2;
traversal2 = traversal2->next;
}
}
}
}
查看22道真题和解析