1.两两交换链表中的节点
LeetCode 24
LeetCode 24 | 两两交换链表中的节点
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
ListNode* cur = dummyHead;
ListNode* temp1 = NULL;
ListNode* temp2 = NULL;
while(cur->next != NULL && cur->next->next != NULL){
temp1 = cur->next;
temp2 = cur->next->next->next;
cur->next = temp1->next;
cur->next->next = temp1;
cur->next->next->next = temp2;
cur = cur->next->next;
}
return dummyHead->next;
delete dummyHead;
delete temp1;
delete temp2;
}
};
2.删除链表的倒数第N个节点
LeetCode 19
LeetCode 19 | 删除链表的倒数第N个节点
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
ListNode* fast = dummyHead;
ListNode* slow = dummyHead;
n++;
while(n-- && fast != NULL){
fast = fast->next;
}
while(fast != NULL){
fast = fast->next;
slow = slow->next;
}
ListNode* temp = slow->next;
slow->next = slow->next->next;
delete temp;
return dummyHead->next;
}
};
3.链表相交
LeetCode 160
LeetCode 160 | 链表相交
4.环形链表II
LeetCode 142
LeetCode 142 | 环形链表II
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode* fast = head;
ListNode* slow = head;
while(fast != NULL && fast->next != NULL) {
slow = slow->next;
fast = fast->next->next;
if (slow == fast) {
ListNode* index1 = fast;
ListNode* index2 = head;
while (index1 != index2) {
index1 = index1->next;
index2 = index2->next;
}
return index2;
}
}
return NULL;
}
};