劍指Offer 036兩個鍊錶的第乙個公共結點

2021-09-25 08:25:12 字數 1389 閱讀 1779

036兩個鍊錶的第乙個公共結點

題目:輸入兩個鍊錶,找出它們的第乙個公共結點。

其實我一開始並不懂什麼是公共結點,上網一搜才知道,下面就是兩個鍊錶有公共結點

公共結點就是兩個鍊錶的結點的位址值相同,不是結點所含的值相同

方法一:hashset儲存法

思路:可以新建乙個hashset的set,然後先將a鍊錶的所有結點存進去,然後在用b的每乙個結點來判斷,當發現set中存在這個結點,就返回這個結點,這就是兩個鍊錶的第乙個結點

**:

儲存法

public listnode findfirstcommonnode(listnode phead1, listnode phead2)

while(cur2!=null)

return null;

}

方法二:普通法

思路:由上圖可得,如果兩個鍊錶長度不同,兩個鍊錶的第乙個結點一定不可能在其中乙個鍊錶比第二個鍊錶長的那部分,於是我們先算出兩個鍊錶的長度,然後移動長的鍊錶到相同長度,然後邊移動邊判斷即可

**:

public listnode findfirstcommonnode(listnode phead1, listnode phead2) 

}else

}while(cur1!=cur2&&cur1!=null)

return cur1;

}public int findlength(listnode phead)

return length;

}

方法三:棧儲存法

思路:如果有公共結點,那麼公共結點跟之後的結點都會相同,我們可以用兩個棧來儲存兩個鍊錶,從尾部開始判斷,如果一旦不相同,返回之前的那個即可

**:

public listnode findfirstcommonnode(listnode phead1, listnode phead2) 

stackstack1 = new stack<>();

stackstack2 = new stack<>();

listnode cur1=phead1;

while(cur1!=null)

cur1=phead2;

while(cur1!=null)

listnode cur2=null;

while(!stack1.isempty()&&!stack2.isempty()&&stack1.peek()==stack2.peek())

return cur2;

}

劍指Offer 036 陣列中的逆序對

牛客oj 陣列中的逆序對 九度oj github 036 陣列中的逆序對 csdn題解 劍指offer 036 陣列中的逆序對 牛客oj 九度oj csdn題解 github 036 陣列中的逆序對 1348 陣列中的逆序對 劍指offer 036 陣列中的逆序對 036 陣列中的逆序對 您也可以選...

劍指offer 合併兩個鍊錶

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。新建乙個節點作為head,依次遍歷兩個陣列 時間複雜度 o n 空間複雜度 o 1 coding utf 8 class listnode def init self,x self.val x self.ne...

劍指offer 兩個鍊錶的合併

我怕是要丸,鍊錶合併不會寫了!題目 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,合成後的鍊錶滿足單調遞增。首先遞迴方法 struct listnode listnode reverselist listnode phead first next last return first 非遞迴 ty...