题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
结果
运行时间:4ms
占用内存:504k
知识点
指针:参考
看到通过的代码用栈 用STL Merge实现 自己弱爆了。。。问自己是科班吗???不脱发证明了我还要更努力才能融入这个集体啊!!!
链表:参考
代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* p2)
{
/*
p->next = p ::断开
p = p->next ::后移
p->next=p表示节点p的下一个节点还是p,如果链表只有p节点,那么这样就变成了一个循环链表
p=p->next表示修改指针p的位置,把p指向原来的下一个节点
头指针(有头结点指向头结点,没有指向首节点)
头结点(data没存数据)
首节点(data存数据了)
*/
ListNode *t1,*p1,*p3;
t1 = p1 = pHead1;
while(p1 && p2)
{
//如果p2 小于 p1 将p2插入到p1中
if(p1->val > p2->val)
{
/*
P1 [data, next] XX [data,next]-[data,next]-[data,next]-
t1->next = p2; ||
|| p2->next = p1;
P2 [data, next]-[data,next]-[data,next]-[data,next]-
p3 = p2->next;
p2 = p3;
*/
//这样理解可能好一点吧:p2前移 p2->next后移 在中间插入节点 然后移动p2(p2->next跟着移动了)
t1->next = p2;//t1->next指向p2---
p3 = p2->next;//p3指向p2->next---
p2->next = p1;//p2-next--指向p1---
p2 = p3;//后移的p2 ==》p2->next--p1--
}
t1 = p1;
p1 = p1->next;
}
if(p2)
t1->next = p2;
return pHead1;
}
};