这个题目没什么就是判断后复制,主要是我们要自己设置一个伪头结点来操作
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode *ptr1=l1;
ListNode *ptr2=l2;
ListNode *ans = new ListNode(0);
ListNode *ptr3=ans;
while(ptr1!=NULL&&ptr2!=NULL)
{
if(ptr1->val<=ptr2->val)
{
ptr3->next=ptr1;
ptr3=ptr3->next;
ptr1=ptr1->next;
}
else
{
ptr3->next=ptr2;
ptr3=ptr3->next;
ptr2=ptr2->next;
}
}
if(ptr1==NULL) ptr3->next=ptr2;
else ptr3->next=ptr1;
return ans->next;
}
这个题目我们我们可以用双指针的办法,我们可以这样想A走完A自己的路后,走B的路,B走完B的路后走A的路,两人最终一定相遇,应为他们走过的路程是一样的,假设两人同时为空,表明没有相交的节点,一句话,只要两个点不相等,一直走,最后终将相遇
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *ptr1=headA;
ListNode *ptr2=headB;
while(ptr1!=ptr2)
{
if(ptr1==NULL&&ptr2==NULL) return NULL;
ptr1==NULL?ptr1=headB:ptr1=ptr1->next;
ptr2==NULL?ptr2=headA:ptr2=ptr2->next;
}
return ptr1;
}