2020 -4-24dianhua面

2020 -4-24dianhua面

兩個單鏈表,是否相交?若相交,則找出第一個相交的節點。

  • 兩個鏈表中有一個共同節點,則這個節點裏的指針域指向的下一個節點地址一樣,所以下一個節點也會相交,依次類推。所以,若相交,則兩個鏈表呈“Y”字形。

在這裏插入圖片描述

  • 從頭遍歷兩個鏈表。
  • 創建兩個棧,第一個棧存儲第一個鏈表的節點,第二個棧存儲第二個鏈表的節點。
  • 每遍歷到一個節點時,就將該節點入棧。
  • 兩個鏈表都入棧結束後。
  • 通過top判斷棧頂的節點是否相等即可判斷兩個單鏈表是否相交。
  • 因爲我們知道,若兩個鏈表相交,則從第一個相交節點開始,後面的節點都相交。
  • 若兩鏈表相交,則循環出棧,直到遇到兩個出棧的節點不相同,則這個節點的後一個節點就是第一個相交的節點。
node temp=NULL;  //存第一個相交節點

while(!stack1.empty()&&!stack1.empty())  //兩棧不爲空
{
    temp=stack1.top();  
    stack1.pop();
    stack2.pop();
    if(stack1.top()!=stack2.top())
    {
        break;
    }
}


  • 沒有要求空間複雜度的時候,使用棧來解決這個問題也是挺簡便的。

遍歷鏈表記錄長度。

  • 遍歷兩個鏈表到尾部,同時記錄兩個鏈表的長度。
  • 若兩個鏈表最後的一個節點相同,則兩個鏈表相交。
  • 有兩個鏈表的長度後,設較長的鏈表長度爲len1,短的鏈表長度爲len2。
  • 則先讓較長的鏈表向後移動(len1-len2)。
  • 然後開始從當前位置同時遍歷兩個鏈表,當遍歷到的鏈表的節點相同時,則這個節點就是第一個相交的節點。

在這裏插入圖片描述

連接

  • https://blog.csdn.net/fengxinlinux/article/details/78885764
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章