仅作为个人方法记录,不涉及详细思路解析,请各位看官海涵!
三道标签都为简单。
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& 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条)