力扣每日刷题 141. 环形链表 136. 只出现一次的数字 160. 相交链表

仅作为个人方法记录,不涉及详细思路解析,请各位看官海涵!

三道标签都为简单

141. 环形链表

这题就是给个链表判断里面是否有环。记录一个新方法:快慢指针。快指针在前面快快走,满指针在后面慢慢走,如果快指针追上了慢指针代表存在环。

class Solution {
public:
    bool hasCycle(ListNode* head) {
        if (head == nullptr || head->next == nullptr) {
            return false;
        }
        ListNode* slow = head;
        ListNode* fast = head->next;
        while (slow != fast) {
            if (fast == nullptr || fast->next == nullptr) {
                return false;
            }
            slow = slow->next;
            fast = fast->next->next;
        }
        return true;
    }
};

136. 只出现一次的数字

这题就是在一个数组里找到唯一的只出现过一次的数字。记录一个新方法,异或

自己^自己=0;        自己^0=自己

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ret = 0;
        for (auto e: nums) ret ^= e;
        return ret;
    }
};

 160. 相交链表

做这题的时候忽略了一个点,就是一个结点相交它之后的结点就都是相交的,所以当时没考虑哈希表,想的是将两个链表控制到同样的长度(长的链表截去前面长出来的部分),然后遍历就行了。当然哈希表做法思路也很简单,这里记录一个官方做法,与上面的快慢指针有些类似,也是循环遍历直至两个链表遍历到相同的结点(第一个相交结点)或者都遍历到尾部(null)。

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        if (headA == nullptr || headB == nullptr) {
            return nullptr;
        }
        ListNode *pA = headA, *pB = headB;
        while (pA != pB) {
            pA = pA == nullptr ? headB : pA->next;
            pB = pB == nullptr ? headA : pB->next;
        }
        return pA;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值