LeetCode問題の解決策は、--19最後から二番目のノードN(C言語)のリストを削除します

オリジナルタイトルリンク:

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;
    
}

 

おすすめ

転載: www.cnblogs.com/ChanJL/p/11300969.html