day4:
24 swap nodes in pairs:
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* newhead = new ListNode(0);
newhead->next = head;
ListNode* cur = newhead;
while(cur->next && cur->next->next){
ListNode* temp1 = cur->next;
ListNode* temp2 = cur->next->next->next;
cur->next = cur->next->next;
cur->next->next = temp1;
cur->next->next->next = temp2;
cur = cur->next->next;
}
return newhead->next;
}
};
19 Remove Nth Node from end:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* newhead = new ListNode(0);
newhead->next = head;
ListNode* slow = newhead;
ListNode* fast = newhead;
while(n+1 && fast) {
fast = fast->next;
n--;
}
while(fast){
fast = fast->next;
slow = slow->next;
}
ListNode* temp = slow->next;
slow->next = slow->next->next;
delete temp;
return newhead->next;
}
};
160 Intersection of two linked list:
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int lengthA = 0;
int lengthB = 0;
ListNode *tempA = headA;
ListNode *tempB = headB;
while(tempA){
lengthA++;
tempA = tempA->next;
}
while(tempB){
lengthB++;
tempB = tempB->next;
}
ListNode *newheadA = headA;
ListNode *newheadB = headB;
int gap = 0;
if(lengthA > lengthB){
gap = lengthA-lengthB;
while(gap-- && newheadA){
newheadA = newheadA->next;
}
}
else if(lengthB > lengthA){
gap = lengthB-lengthA;
while(gap-- && newheadB){
newheadB = newheadB->next;
}
}
while (newheadA != NULL) {
if (newheadA == newheadB) {
return newheadA;
}
newheadA = newheadA->next;
newheadB = newheadB->next;
}
return NULL;
}
};
142 Linked list cycle:
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode *slow = head;
ListNode *fast = head;
while(fast && fast->next){
slow = slow->next;
fast = fast->next->next;
if(slow == fast){
ListNode *index1 = slow;
ListNode *index2 = head;
while(index1 != index2){
index1 = index1->next;
index2 = index2->next;
}
return index1;
}
}
return nullptr;
}
};