在链表c ++中使用new关键字与不使用new关键字之间的区别

时间:2018-06-20 03:28:37

标签: linked-list

 /**
 * 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 dummy(INT_MIN);
    ListNode *tail = &dummy; 

    while (l1 && l2) {// while l1!= NULL && l2 != NULL)
        if (l1->val < l2->val) {
            tail->next = l1;
            l1 = l1->next;
        } else {
            tail->next = l2;
            l2 = l2->next;
        }
        tail = tail->next;
    }

    tail->next = l1 ? l1 : l2;
    return dummy.next;
}

};

E.G说l1 = 1,l2 = 1,2 mergeTwoLists(l1,l2)返回1,1,2

我只是对创建一个新的链表节点有几个问题。 有人告诉我,在声明和初始化列表节点时必须使用新关键字。因此对于函数中的前两行,您不需要使用:

ListNode *tail = new ListNode() 

ListNode *tail = new ListNode(int)?

我不太确定语法,但是ListNode虚拟(INT_MIN)正在堆栈上创建节点,例如tail?我只是感到困惑,想将其整理得尽可能清楚。感谢您的答复。

0 个答案:

没有答案