算法训练Day4—链表II(24两两交换链表中的节点、19删除链表的倒数第N个节点、160链表相交、142环形链表II)

77 阅读1分钟

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;
    }
};