描述:
將兩個排序鏈表合併爲一個新的排序鏈表
樣例:
給出 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來表示.