day4 | 链表part02

24. 两两交换链表中的节点

一时间没写出来,只需要管一个指针就够了,后面的两个指针每次循环定义下就ok了

class Solution {
public:
    // 只需要管一个指针就够了  后面的两个指针每次循环定义下就ok了
    ListNode* swapPairs(ListNode* head) {
        ListNode* dummy = new ListNode(0, head);
        ListNode* ptr = dummy;
        while (ptr != nullptr && ptr->next != nullptr && ptr->next->next != nullptr)
        {
            // 后面两个
            ListNode* one = new ListNode;
            one = ptr->next;
            ListNode* two = new ListNode;
            two = one->next;

            // 交换
            ptr->next = two;
            one->next = two->next;
            two->next = one;

            ptr = one;
        }
        return dummy->next;
    }
};

19. 删除链表的倒数第 N 个结点

没有难度,前后双指针

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* dummy = new ListNode(0, head);
        ListNode* p1 = dummy, *p2 = dummy;
        for (int i = 0; i < n+1; i ++) p2 = p2->next;
        while (p2)
        {
            p2 = p2->next;
            p1 = p1->next;
        }
        p1->next = p1->next->next;
        return dummy->next;
    }
};

面试题 02.07. 链表相交

让两个指针都跑 a+b+c 的长度

需要注意的是两个都是nullptr就代表没有相交

class Solution {
public:
    // 让每个节点都跑 a + b + c
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        if (headA == nullptr || headB == nullptr) return nullptr;
        ListNode*p1 = headA;
        ListNode*p2 = headB;
        // 可能出现不相交的情况, 所以要让程序能够正常终止 => 能够都是nullptr后跳出来
        while (p1 != p2)
        {
            p1 = p1 == nullptr ? headB : p1->next;
            p2 = p2 == nullptr ? headA : p2->next;
        }
        return p1;
    }
};

142. 环形链表 II

双指针挺数学公式的

class Solution {
public:
    // slow是nb 入环点是a+nb  所以要让slow再跑a步
    ListNode *detectCycle(ListNode *head) {
        if (head == nullptr) return nullptr;
        ListNode* fast = head;
        ListNode* slow = head;
        while (fast != nullptr)
        {
            slow = slow->next;
            if (fast->next == nullptr) return nullptr;
            fast = fast->next->next;
            // 相遇了  slow已经走过nb了,fast走过2nb了 让slow再走a
            if (fast == slow)
            {
                fast = head;
                while (fast != slow)
                {
                    fast = fast->next;
                    slow = slow->next;
                }
                return fast;
            }
        }
        return nullptr;
    }
};
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇