如下的代码可以leetcode AC,但是传入的l1和l2内容却被改变了,我不是非常理解。
因为我自己定义了两个指针p1,p2,这两个指针同l1,l2指向同样的节点,为什么我只是移动p1,p2,没有改变其中的内容,但是传入的l1和l2内容变化了?
/**
* 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 = ListNode(-1);
ListNode *pDummy = &dummy;
ListNode *p1 = l1;
ListNode *p2 = l2;
while (p1 && p2) {
if (p1->val <= p2->val) {
pDummy->next = p1;
p1 = p1->next;
} else {
pDummy->next = p2;
p2 = p2->next;
}
pDummy = pDummy->next;
}
pDummy->next = p1 != NULL ? p1 : p2;
// 到这里题目就做完了,接下来输出l1,l2,发现他们已经改变,为什么会变?
ListNode *p11 = l1;
ListNode *p22 = l2;
while (p11) {
printf("val %d \n", p11->val);
p11 = p11->next;
}
while (p22) {
printf("val %d \n", p22->val);
p22 = p22->next;
}
return dummy.next;
}
};
你说的“内容”指啥?
val
?next
?你确实没有改
val
,但是改了next
。