题目:合并两个有序链表
原题链接:合并两个有序链表
正确提交之前自己有两次失败提交的经历,因为链表太长时间没接触了,指针的使用有点忘记了(本来就掌握的不好…)。在这里写出错误,提醒自己,加深印象;也提醒一下正在看这篇文章的你。
错误方式一:
错误方式二:
这两个错误方式(红线)都是没有建立起head头结点与之后的链表的关系,而且节点之间的连接关系也没有建立;而还有冗余的操作(蓝线),没必要再新建节点。
正确代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* head = new ListNode(0);
ListNode* p = head;
while(l1 != NULL && l2 != NULL)
{
if(l1->val <= l2->val)
{
p->next = l1;
l1 = l1->next;
}
else
{
p->next = l2;
l2 = l2->next;
}
p = p->next;
}
if(l1 != NULL) p->next = l1;
else p->next = l2;
return head->next;
}
};
提交结果
题外话:
因为害怕自己并非明珠而不敢刻苦雕琢,又因为有几分相信自己是明珠,而不能与瓦砾碌碌为伍。
——《山月记》