LeetCode-19-チェーンテーブルの最後からN番目のノードを削除
1287 ワード
LeetCode-19-チェーンテーブルの最後からN番目のノードを削除
タイトル
チェーンテーブルが与えられ、チェーンテーブルの最後からn番目のノードが削除され、チェーンテーブルのヘッダノードが返される.
例:
チェーンテーブルが与えられる:1->2->3->4->5、およびn=2.
最後から2番目のノードを削除すると、チェーンテーブルは1->2->3->5になります.説明:
与えられたn保証は有効である.
ステップ:
スキャンを使って実現してみてもいいですか?
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
問題を解く構想.
これは実は比較的よく見られるチェーンテーブルの問題で、チェーンテーブルのいくつかのアルゴリズムの問題に触れたことがあるならば.解法は、二重ポインタ
C++実装
タイトル
チェーンテーブルが与えられ、チェーンテーブルの最後からn番目のノードが削除され、チェーンテーブルのヘッダノードが返される.
例:
チェーンテーブルが与えられる:1->2->3->4->5、およびn=2.
最後から2番目のノードを削除すると、チェーンテーブルは1->2->3->5になります.説明:
与えられたn保証は有効である.
ステップ:
スキャンを使って実現してみてもいいですか?
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
問題を解く構想.
これは実は比較的よく見られるチェーンテーブルの問題で、チェーンテーブルのいくつかのアルゴリズムの問題に触れたことがあるならば.解法は、二重ポインタ
a,b
が使用され、b
がa
以降のn-1
番目のノードである場合、a/b
が同時に後方に移動し、b
が末尾に移動すると、a
が逆数のn
番目のノードを指す.もちろん、a
の前駆ノードを指すポインタも必要である.C++実装
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(!head) return head;
ListNode *prev = NULL;
ListNode *a = head;
ListNode *b = a;
for(int i = 0; i < n - 1; i++)
b = b->next;
while(b->next)
{
prev = a;
a = a->next;
b = b->next;
}
if(!prev)
return a->next;
prev->next = a->next;
return head;
}
};