O
问题
解决方案
代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
思路: 合并问题采用双指针的基础操作,没有快慢, 只有对比。 从左边遍历到右边, 哪一边能走就走哪一边。
- define left right =head, current.
- while(left &&right)
- - if left val < right val current = left; current = current->next; left = left->next ,
- - else current = right current = current ->next
-
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2){
ListNode* left = pHead1;
ListNode* right = pHead2;
if(left==NULL){
return right;
}
if(right==NULL){
return left;
}
ListNode *current = new ListNode(0);
ListNode* h = current;
while(left!=nullptr&&right!=nullptr){
if(left->val<=right->val){
// if we get same val , firt we make one into list , next step is another.
current->next = left;
current = current->next;
left = left->next;
}
else if (left->val>right->val){
current->next = right;
current = current->next;
right = right->next;
}
}
if(left)current->next = left;
if(right)current->next = right;
return h->next;
}
};
总结与反思
- 注意== 情况下是怎么走的,一个走过去之后下一次判断也会把等于的另外一个带上。 如果一起走也是可以的。两边同时加1。
- 注意 ==单独判断的时候current指针很容易修改指向的其他地址内容,这里就不建议用next.next了。 要是数组的话单独判断没问题,但是链表乱等于容易把地址里面的内容弄没了。