LeetCode[Linked List]: Remove Nth Node From End of List

Given a linked list, remove the nth node from the 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.

这个题目我想到两种解法。时间复杂度均为O(N),空间复杂度有所区别,一种是O(N),一种是O(1)。

另外,这个题目我觉得需要注意的地方是应该delete掉删除的节点,防止内存泄露。

空间复杂度为 O(N) 的解法

需要用到一个vector保存所有节点的地址,具体代码如下:

C++ code

    ListNode *removeNthFromEnd(ListNode *head, int n) {
        vector<ListNode *> list;
        for (ListNode *iter = head; iter != NULL; iter = iter->next)
            list.push_back (iter);

        if (n == list.size()) {
            head = list[0]->next;
            delete list[0];
            return head;
        }

        list[list.size() - n - 1]->next = list[list.size() - n]->next;
        delete list[list.size() - n];

        return list[0];
    }

空间复杂度为 O(1) 的解法

设置两个指针,fast较low快n个节点。具体代码如下:

C++ code

    ListNode *removeNthFromEnd(ListNode *head, int n) {
        ListNode *fast = head, *low = head, *delNode;

        for (int i = 0; i < n; ++i)
            fast = fast->next;

        if (!fast) {
            delNode = head;
            head = head->next;
            delete delNode;
            return head;
        }

        while (fast->next) {
            fast = fast->next;
            low  = low ->next;
        }

        delNode = low->next;
        low->next = low->next->next;
        delete delNode;

        return head;
    }
时间: 2024-10-07 06:30:13

LeetCode[Linked List]: Remove Nth Node From End of List的相关文章

Leetcode 线性表 Remove Nth Node From End of List

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Remove Nth Node From End of List Total Accepted: 12160 Total Submissions: 41280 Given a linked list, remove the nth node from the end of list and return its head. For example, Given linked list: 1

[Leetcode][Python]19: Remove Nth Node From End of List

# -*- coding: utf8 -*-'''__author__ = '[email protected]' 19: Remove Nth Node From End of Listhttps://oj.leetcode.com/problems/remove-nth-node-from-end-of-list/ Given a linked list, remove the nth node from the end of list and return its head. For ex

LeetCode 19: Remove Nth Node From End of List

Given a linked list, remove the nth node from the 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

【LeetCode】 19. Remove Nth Node From End of List 解题小结

题目: Given a linked list, remove the nth node from the 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. 首先容易想到的是

【LeetCode OJ】Remove Nth Node From End of List

题目:Given a linked list, remove the nth node from the 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. struct Li

leetcode笔记:Remove Nth Node From End of List

一. 题目描述 Given a linked list, remove the n th node from the 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. Not

LeetCode Valid Parentheses Remove Nth Node From End of List

public ListNode removeNthFromEnd(ListNode head, int n) { if(head==null) return null; if(n==0)//如果n==0 return head; Map<Integer,ListNode> map=new HashMap<Integer, ListNode>(); int i=0; ListNode temp=head; do { map.put(++i, temp); temp=temp.next

LeetCode(19) - Remove Nth Node From End of List

题目要求是,给你一个单向链表,和一个数字n,删除该链表倒数第n个node,其中测试案例中n能保证一定有效. 思路很简单,用两个指针,它们两个相隔为n,当后面的指针指向链表尾的时候,前面的指针指向的node的下一个node,就是要删除的那一个. 代码如下: 1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int

【LeetCode】19. Remove Nth Node From End of List

题目: 思路:如果链表为空或者n小于1,直接返回即可,否则,让链表从头走到尾,每移动一步,让n减1. 1.链表1->2->3,n=4,不存在倒数第四个节点,返回整个链表 扫过的节点依次:1-2-3 n值得变化:3-2-1 2.链表1->2->3,n=3 扫过的节点依次:1-2-3 n值得变化:2-1-0 3.链表1->2->3,n=2 扫过的节点依次:1-2-3 n值得变化:1-0--1 当走到链表结尾时:1.n>0,说明链表根本没有第n个节点,直接返回原链表: