【鏈表】[Lintcode]合併兩個排序鏈表 

描述:

將兩個排序鏈表合併爲一個新的排序鏈表


樣例:

給出 1->3->8->11->15->null2->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來表示.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章