問題:輸入兩個鍊錶,找出它們的第乙個公共結點。
分析:第一反應是蠻力法,這是沒認真思考才想到的方法。仔細分析就會發現,這兩個鍊錶有著共同的尾部,在兩個煉表達到第乙個公共結點後,之後每個結點都是相同的,拓撲形狀呈現為y型結構。
思路一:首先遍歷兩個鍊錶,得到兩個鍊錶的長度,並得到兩個鍊錶的長度差。然後進行第二次遍歷,首先在更長的哪一條鍊錶上先走那個長度差的步數(可能長度差為零,一步也不走),然後同步遍歷兩條鍊錶,直到找到相同的結點,若相同的結點為null,說明沒有公共節點。
//先計算兩個鍊錶的長度,然後讓長的鍊錶先走兩個鍊錶的長度差,
//然後一起走,相同時即得到公共結點,若同為null,則表明無公共結點
/*struct listnode
};*/
class solution
else
while(phead1 != phead2)
return phead1;
}//計算鍊錶長度
int findlength(listnode* phead)
return length;
}//前進n個結點
listnode* gonsteps(listnode* phead, int n)
return phead;}};
思路二:這個比較難想到,直接上**,然後再分析
/*
struct listnode
};*/
class solution
return p1;}};
第一種情況:兩條鍊錶長度相同且有公共結點,容易得出迴圈體內第一次就遍歷到公共結點;
第二種情況:長度相同且沒有公共結點,走到尾部null相遇,返回null;
第三種情況:長度不同有公共結點,第一遍遍歷就得到差值,第二遍一起到公共結點;
第四種情況:長度不同且沒有公共結點,第一遍得到差值,第二遍一起到結尾,返回null。
輸入兩個鍊錶,找出它們的第乙個公共結點
題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點。分析 關鍵 公共部分長度一樣的,讓不公共的部分同步往前走就可以了。也就是長的先走,走到剩餘鍊錶長度和另乙個鍊錶長度相同的地方,兩個鍊錶同步走。class solution def findfirstcommonnode self,phead1,phe...
輸入兩個鍊錶,找出它們的第乙個公共結點
解題思路 要找到相交結點,首先計算出兩個鍊錶的長度,先讓長的鍊錶走abs lena lenb 步,然後再同步進行遍歷,如果兩個結點相等則返回true否則為false。definition for singly linked list.struct listnode typedef struct li...
兩個單向鍊錶,找出它們的第乙個公共結點
package structure.list import structure.list.node.lnode 01 題目 兩個單向鍊錶,找出它們的第乙個公共結點 author toy public class first commonnode 逐個考察 o m n param head1 para...