這個是乙個比較綜合的問題:
該題可以分解為三個問題:
#include "myinclude.h"
/* 問題一:
判斷乙個鍊錶是否有環.
如果有,返回第乙個進入環的節點.
如果沒有,返回null
*/// 快慢指標,若存在環,則一定會在環中的某乙個節點相遇.
// 然後再找第入口
// listnode* getloopnode(listnode* head)
// 初始值,slow走了一步,fast走了兩步
listnode* slow = head->next;
listnode* fast = head->next->next;
while (slow != fast)
slow = slow->next;
fast = fast->next->next;
} // 存在環,找環的第乙個節點.
slow = head;
while (slow != fast)
return slow;
}
/*
若兩個無環鏈表相交,返回相交節點,
否則,返回null
*/int getlen(listnode* head)
return len;
}listnode* noloop(listnode* head1, listnode* head2)
int absdiff = (len1 - len2);
while (absdiff != 0)
while (p1 != null&&p2 != null&&p1 != p2)
if (p1 == null || p2 == null)
else
}
/*
判斷兩個有環鏈表是否相交
若相交,返回第乙個相交點
若不相交,返回null
*/// 求出有環鏈表的環入口節點
listnode* getloopenter(listnode* head)
slow = head;
while (slow != fast)
return slow;
}listnode* bothloop(listnode* head1, listnode* head2)
// 不相等,則遍歷一遍乙個環自身,看是否能找到另乙個環的入口節點,有則為相交,沒有則為不相交
listnode* p = loop1->next;
while (p != loop1)
p = p->next;
} return null;
}
/*
檢測兩個單鏈表是否相交,
若相交,返回第乙個相交的節點
若不相交,返回null
*//*
分析:若乙個鍊錶有環,乙個鍊錶沒有換,則不可能相交
若兩個單鏈表都有環,
則需要檢測兩個有環鏈表是否相交
若二者都沒有,
則判斷兩個無環的單鏈表是否相交
*/// 1.判斷乙個鍊錶是否有環
listnode* hasloop(listnode* head)
slow = slow->next;
fast = fast->next->next;
} slow = head;
while (slow != fast)
return slow;
}// 2.兩個無環鏈表是否相交
int getlen(listnode* head)
return len;
}listnode* noloop(listnode* head1, listnode* head2)
int absdiff = (len1 - len2);
while (absdiff != 0)
while (p1 != null&&p2 != null&&p1 != p2)
if (p1 == null || p2 == null) else
}// 3.兩個有環鏈表是否相交,
listnode* bothloop(listnode* loop1, listnode* loop2)
else
return null; }}
listnode* getintersectnode(listnode* head1, listnode* head2)
if (loop1 != null&&loop2 != null)
return null;
}
兩個單鏈表相交的一系列問題
兩個單鏈表相交的一系列問題 在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1 和 head2,這兩個鍊錶可能相交,也可能 不相交。請實現乙個函式,如果兩個鍊錶相交,請返回相交的第乙個節點 如果不相交,返回 null 即可。如果鍊錶 1 的長度為 n,鍊錶 2 的長度為 m,時...
兩個單鏈表相交的一系列問題
在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1和head2,這兩個鍊錶可能相交,也可能不相交。請實現乙個函式,如果兩個鍊錶相交,請返回相交的第乙個節點 如果不相交,返回null 即可。要求 如果鍊錶1的長度為n,鍊錶2的長度為m,時間複雜度請達到 o n m 額外空間複雜度...
兩個單鏈表相交的一系列問題
兩個單鏈表相交的一系列問題 題目 在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1和head2,這兩個鍊錶可能相交,也可能不相交。請實現乙個函式,如果兩個鍊錶相交,請返回相交的第乙個節點 如果不相交,返回null 即可。要求 如果鍊錶1的長度為n,鍊錶2的長度為m,時間複雜度...