剣指Offer-JZ 36-2つのチェーンテーブルの最初の共通ノード
6404 ワード
タイトルの説明
2つのチェーンテーブルを入力し、最初の共通ノードを見つけます.(注意入力データはチェーンテーブルなので、エラーテストデータのヒントは他の方法で表示され、入力データが正しいことを保証します)
問題を解く構想.は2つのチェーンテーブルの長さを取得し、長いチェーンテーブルを2つのチェーンテーブルの長さの差のノード を先に右に歩かせる.さらに2つのチェーン時計を一緒に右に 行きます
コード実装
コード実装
実行時間:3 msメモリ消費量:376 k
2つのチェーンテーブルを入力し、最初の共通ノードを見つけます.(注意入力データはチェーンテーブルなので、エラーテストデータのヒントは他の方法で表示され、入力データが正しいことを保証します)
問題を解く構想.
コード実装
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
int length1 = getLength(pHead1);
int length2 = getLength(pHead2);
if(length1 > length2){
pHead1 = nextN(pHead1, length1 - length2);
}
else{
pHead2 = nextN(pHead2, length2 - length1);
}
while(pHead1 != NULL){
if(pHead1 == pHead2){
return pHead1;
}
pHead1 = pHead1->next;
pHead2 = pHead2->next;
}
// return NULL; // ?
}
private:
//
int getLength(ListNode* pHead){
if(pHead == NULL){
return 0;
}
int length = 1;
while(pHead = pHead->next){
length++;
}
return length;
}
// n
ListNode* nextN(ListNode* pHead, int n){
while(n--){
pHead = pHead->next;
}
return pHead;
}
};
コード実装
実行時間:3 msメモリ消費量:376 k