剣指offer-面接問題52:2つのチェーンテーブルの最初の共通ノード-C++
2418 ワード
大体の考えは覚えています.何の参考にもならない
初めてパスしなかったのは冒険して2つのポインタを定義する方法を試したいからです.
覚えてるよ!
マイコード:
2回書いたところが嫌で、改善され、改善されたコードがはっきりしていて、関数の機能が単一です.
自分が今突き詰めている精神をほめて!何か分からないことがあったら、その場で理解して、このように積み重ねていくとますます素晴らしいです!
初めてパスしなかったのは冒険して2つのポインタを定義する方法を試したいからです.
// , ListNode* ListNode
// ListNode *pNode1 = pHead1, pNode2 = pHead2;
//
ListNode *pNode1 = pHead1, *pNode2 = pHead2;
覚えてるよ!
マイコード:
/*
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 = 0, length2 = 0;
ListNode * pNode1 = pHead1, * pNode2 = pHead2;
while(pNode1 != nullptr) {
length1++;
pNode1 = pNode1->next;
}
while(pNode2 != nullptr) {
length2++;
pNode2 = pNode2->next;
}
pNode1 = pHead1;
pNode2 = pHead2;
if(length1 >= length2) {
for(int i=0; inext;
}
} else {
for(int i=0; inext;
}
}
while(pNode1 != pNode2) {
pNode1 = pNode1->next;
pNode2 = pNode2->next;
}
return pNode1;
}
};
2回書いたところが嫌で、改善され、改善されたコードがはっきりしていて、関数の機能が単一です.
class Solution {
public:
ListNode* FindFirstCommonNode(ListNode* pHead1, ListNode* pHead2) {
int length1 = CountNodes(pHead1), length2 = CountNodes(pHead2);
ListNode *pNode1 = pHead1, *pNode2 = pHead2;
if(length1 >= length2) {
pNode1 = StepForward(pHead1, length1-length2);
} else {
pNode2 = StepForward(pHead2, length2-length1);
}
while(pNode1 != pNode2) {
pNode1 = pNode1->next;
pNode2 = pNode2->next;
}
return pNode1;
}
int CountNodes(ListNode* pHead) {
int result = 0;
ListNode* pNode = pHead;
while(pNode != nullptr) {
result++;
pNode = pNode->next;
}
return result;
}
ListNode* StepForward(ListNode* pHead, int num) {
ListNode* pNode = pHead;
for(int i=0; inext;
}
return pNode;
}
};
自分が今突き詰めている精神をほめて!何か分からないことがあったら、その場で理解して、このように積み重ねていくとますます素晴らしいです!