ListNode* swapPairs(ListNode* head) {
ListNode* curr = head;
ListNode* pre = nullptr;
while(curr){
ListNode* tmp = curr->next;
if(!tmp){
break;
}
if(!pre){
head = tmp;
}else{
pre->next = curr->next;
}
curr->next = tmp->next;
tmp->next = curr;
pre = curr;
curr = curr->next;
}
return head;
}
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummy = new ListNode(0);
dummy->next= head;
ListNode* slow = dummy;
ListNode* fast = dummy;
while(fast->next){
if(n<=0){
slow = slow->next;
}
fast = fast->next;
--n;
}
slow->next = slow->next->next;
return dummy->next;
}
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* pA = headA;
ListNode* pB = headB;
while(pA && pB){
pA = pA->next;
pB = pB->next;
}
ListNode* a = headA;
ListNode* b = headB;
if(!pA && pB){
while(pB){
pB = pB->next;
b = b->next;
}
}
if(pA && !pB){
while(pA){
pA = pA->next;
a = a->next;
}
}
while(a && b){
if(a == b){
return a;
}
a = a->next;
b = b->next;
}
return nullptr;
}