19. Remove Nth Node From End of List #Linked List (Easy)

Problem:

Remove Nth Node From End of List and return its head.
For example,

Given linked list: 1->2->3->4->5, and n = 2. 
After removing the second node from the end, the linked list becomes 1->2->3->5.

Note: Given n will always be valid. Try to do this in one pass.

Solution:

two pointers

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode * it = head;
        ListNode * fast = head;
        if(head -> next == NULL) return NULL; //important
        for(int i = 0;i < n; i++)
        {
            fast = fast -> next;
        }
        if(fast == NULL) //important
        {
            head = it -> next;
            delete it;
            return head;
        }
        while(fast->next != NULL)
        {
            fast = fast->next;
            it = it ->next;
        }
        if(it->next != NULL)
        {
            ListNode* discard = it -> next;
            it->next = it->next->next;
            delete discard;
        }
        return head;
    }
};

Memo:

Always check the edge cases!!!
Check validation for all it->next operation!!!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容