描述:
将两个排序链表合并为一个新的排序链表
样例:
给出 1->3->8->11->15->null
,2->null
, 返回 1->2->3->8->11->15->null
。
具体思想就是新建一个链表,然后比较两个链表中的元素值,把较小的那个链到新链表中,由于两个输入链表的长度可能不同,所以最终会有一个链表先完成插入所有元素,则直接另一个未完成的链表直接链入新链表的末尾。
代码如下:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode *dummy = new ListNode(-1), *cur = dummy;
while (l1 && l2) {
if (l1->val < l2->val) {
cur->next = l1;
l1 = l1->next;
} else {
cur->next = l2;
l2 = l2->next;
}
cur = cur->next;
}
cur->next = l1 ? l1 : l2;
return dummy->next;
}
};
注:
1.*a=b 表示 a指针所指向的数据,等于b
*a=&b 表示 a指针所指向的数据,等于b的地址
p=&a 表明 把a的地址 赋值给p (p是指针)
*p=&a 表明 把a的地址 赋值给p指向的那个数据 (p指针指向的那个数据也是一个指针,p是指针的指针)
例外情况: int a=0, *p=&a; //此例等效于int a=0; int *p=&a(*p=&a只是定义指针并赋初值)
2.数据结构p->next 含义问题
p是个指针,p->next表示p指针所指向结点的指针域. 我想问为什么不是 *p->next 来表示呢 ?p只是个指针(地址)啊, 既然结点的指针域 ,结点为什么不是*p 而是p来表示.