オリジナルタイトルリンク:
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
トピック:
リストを考えると、n個のノードのリストの逆数を削除して、ヘッドノードリストに戻ります。
例:
リストが与えられ:1 - > 2 - > 3 - > 4 - > 5、及びAは= N- 2 。 最後から二番目のノードを除去する場合、リストとなる1 - > 2 - > 3 - > 5。
説明:
Nは、効果的な確保するために与えられています。
高度:
あなたはそれを達成するために、1つのパスを使用しようとすることができますか?
分析:
この問題は、NULL値は、処理に注意し、二重ポインタを用いて解くことができます。
(1)は、2つのポインタを確立し、ヘッドノード点一方、
(2)と仮定すると、後方最初のn個のステップを取るN = 2、(2)の位置に第(1)位置するように、
(3)と第1 ;最初の終端が来る第二後方歩行、一方、
(4)次の次の第二の二点。
コード:
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* removeNthFromEnd(struct ListNode* head, int n){ if(head == NULL || n == 0) return head; struct ListNode *first, *second; first = head; second = head; while(n--) first = first->next; if(first == NULL) return head->next; while(first->next) { first = first->next; second = second->next; } second->next = second->next->next; return head; }