目录
二:定义一个指针p,让p指向俩个有序链表中更小的第一个结点。
四、如果循环结束要么俩个链表都为空,要么其中一个为空,将后面的链表接入p的位置即可
一个比较简单的链表合并,不过两种思路挺不错。
一:首先对俩个链表进行判空,哪个空了就直接返回另外一个。
if(NULL == pHead1)
return pHead2;
if(NULL == pHead2)
return pHead1;
二:定义一个指针p,让p指向俩个有序链表中更小的第一个结点。
struct ListNode* p = NULL;
struct ListNode* P = NULL;
struct ListNode* p1 = pHead1;
struct ListNode* p2 = pHead2;
if(p1->val <= p2->val)
{
p = p1;
p1 = p1->next;
}
else
{
p = p2;
p2 = p2->next;
}
P = p;
三:进行链表的有序合并
while(p1 && p2)
{
if(p1->val >= p2->val)
{ //利用p结点后的尾插 利用p指针的直接指向
pHead2 = p2->next; //p->next = p2;
p2->next = p->next; //p2 = p2->next;
p->next = p2;
p2 = pHead2;
}
else
{
pHead1 = p1->next; //p->next = p1;
p1->next = p->next; //p1 = p1->next;
p->next = p1;
p1 = pHead1;
}
p = p->next;
}
可以看到有俩种思路,我先想到的是直接在p指针后将结点尾插到后面。
另外一个思路 是直接在链表上进行操作,通过移动p指针的指向。
当指针遍历到上图中 位置时,p1指针的值大于p2指针的值的时候,就可以利用p指针直接指向p2的位置,然后让p2 移动到下一个位置即可。
四、如果循环结束要么俩个链表都为空,要么其中一个为空,将后面的链表接入p的位置即可
if(p1 == NULL)
p->next = p2;
if(p2 == NULL)
p->next = p1;
return P;