合并两个排序的链表
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* dummyHead=new ListNode(-1);
ListNode* cur=dummyHead;
ListNode* cur1=l1;
ListNode* cur2=l2;
while(cur1!=NULL&&cur2!=NULL)
{
if(cur1->val>cur2->val)
{
cur->next=cur2;
cur2=cur2->next;
}
else
{
cur->next=cur1;
cur1=cur1->next;
}
cur=cur->next;
}
if(cur1!=NULL) cur->next=cur1;
if(cur2!=NULL) cur->next=cur2;
return dummyHead->next;
}
};
两个链表的第一个公共节点
让两个链表尾部对齐
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* curA=headA;
ListNode* curB=headB;
int lengthA=0,lengthB=0;
while(curA!=NULL)
{
curA=curA->next;
lengthA++;
}
while(curB!=NULL)
{
curB=curB->next;
lengthB++;
}
curA=headA;
curB=headB;
//让lengthA始终为较长的那个链表,让两个链表尾部对齐
if(lengthA<lengthB)
{
swap(lengthA,lengthB);
swap(curA,curB);
}
int lenghth=lengthA-lengthB;
//让A先走length步
while(lenghth--)
{
curA=curA->next;
}
while(curA!=NULL)
{
if(curA==curB) return curA;
curA=curA->next;
curB=curB->next;
}
return NULL;
}
};