leetcode 19. 删除链表的倒数第N个节点

2020-10-20  本文已影响0人  SourceZhang

(leetcode)[https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/]

class Solution {
public:
    ListNode *removeNthFromEnd(ListNode *head, int n) {
        
        ListNode *returnedHead = head;
        ListNode *previousNode = NULL;
        int size = 0;
        while ( head ) {

            if ( size == n || previousNode ) {

                if ( previousNode ) {
                    
                    previousNode = previousNode -> next;

                } else {

                    previousNode = returnedHead;
                }
            }

            head = head -> next;
            ++size;
        }
        if ( n == size ) {

            if ( returnedHead ) {

                ListNode *next = returnedHead -> next;
                returnedHead -> next = NULL;
                delete returnedHead;
                returnedHead = next;
            }

        } else if ( n < size ) {

            if ( previousNode ) {

                ListNode *next = previousNode -> next;
                if ( next ) {

                    previousNode -> next = next -> next;
                    delete next;
                    next = NULL;
                }
            }
        }

        return returnedHead;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读