Linked List 链表
141. Linked List Cycle 判断单链表中是否有环
使用到的数据结构:List
使用到的算法技巧:Tow Pointers 辅助指针
//设置两个指针,快指针每次走两步,慢指针每次走一步,如果链表有环,快指针肯定会与慢指针重合
class Solution {
public:
bool hasCycle(ListNode *head) {
if(head == NULL || head->next == NULL)
return false;
ListNode* slow = head;
ListNode* fast = head->next;
while(slow != fast)
{
if(fast == NULL || fast->next == NULL)
return false;
slow = slow->next;
fast = fast->next->next;
}
return true;
}
};
这道题目同样也可以用哈希表
class Solution {
public:
bool hasCycle(ListNode *head) {
unordered_map<ListNode*,bool> hashnode;
while(head != NULL)
{
if(hashnode[head] == true)
return true;
hashnode[head] = true;
head = head->next;
}
return false;
}
};
160. Intersection of Two Linked Lists 找出两个链表的交点
例子可参考题目中给出的:
使用到的数据结构:List
//例如上面例子中,求得A链表长度是5,B链表长度是6,两者长度差是1,B链表结点先移动一步到b2,然后开始比较a1-b2、a2-b3,一直到c1-c1
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(headA == NULL || headB == NULL)
return NULL;
int alength = 0;
int blength = 0;
ListNode* pa = headA;
ListNode* pb = headB;
while(pa != NULL)
{
alength++;
pa = pa->next;
}
while(pb != NULL)
{
blength++;
pb = pb->next;
}
pa = headA;
pb = headB;
int step = alength - blength;
if(step >0)
{
int astep = step;
while(astep--)
{
pa = pa->next;
}
}
else
{
int bstep = -step;
while(bstep--)
{
pb = pb->next;
}
}
while(pa != pb && pa != NULL && pb != NULL)
{
pa = pa->next;
pb = pb->next;
}
return pa;
}
};
这道题目同样可以用hash思想来解决
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
set<ListNode*> check;
ListNode* pA = headA;
while(pA != NULL)
{
//把链表A的结点依次放入set中
check.insert(pA);
pA = pA->next;
}
ListNode *pB = headB;
while(pB != NULL)
{
//遍历B链表,查看每个结点在set中是否存在
if(check.find(pB) != check.end())
return pB;
pB = pB->next;
}
return NULL;
}
};
怎样应对IT面试与笔试-(一)
怎样应对IT面试与笔试-(二)
怎样应对IT面试与笔试-(三)
怎样应对IT面试与笔试-(四)
怎样应对IT面试与笔试-(五)
怎样应对IT面试与笔试-(五-1)
怎样应对IT面试与笔试-(六)
怎样应对IT面试与笔试-(七)
怎样应对IT面试与笔试-(八)
怎样应对IT面试与笔试-(九)
怎样应对IT面试与笔试-(十)
怎样应对IT面试与笔试-(十一)
怎样应对IT面试与笔试-(十二)
怎样应对IT面试与笔试-(十三)
怎样应对IT面试与笔试-(十四)
怎样应对IT面试与笔试-(十五)
怎样应对IT面试与笔试-(十六)