码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode: Remove Nth Node From End of List

时间:2015-03-21 12:41:53      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:leetcode

题目:
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.

思路分析:
双指针,前后两个指针之间的距离为n-1,当后一个指针指向链表末尾结点的时候,前一个指针指向的结点就是要删除的结点。

C++参考代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution
{
public:
    ListNode *removeNthFromEnd(ListNode *head, int n)
    {
        if (!head) return nullptr;
        int count = 1;
        ListNode *previous = nullptr;//指向front元素前面的结点
        ListNode *front = head;//前面的指针,指向要删除的结点
        ListNode *back = head;//与front指针保持n-1的距离
        //将back指针从第1个位置移动到第n个位置
        while (count < n)
        {
            back = back->next;
            count++;
        }
        //将back指针一直移动到;链表最末尾
        while (back->next)
        {
            previous = front;
            front = front->next;
            back = back->next;
        }
        //如果previous不为空,则将previous指针的next指向front的next,即将front删除
        if (previous)
        {
            previous->next = front->next;
        }
        //如果previous为空,说明删除的是第一个位置的结点即头结点
        else
        {
            head = head->next;
        }
        front = nullptr;
        return head;

    }
};

C#参考代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
public class Solution
{
    public ListNode RemoveNthFromEnd(ListNode head, int n)
    {
    if (head == null) return null;
        ListNode previous = null;
        ListNode front = head;
        ListNode back = head;
        for (int i = 0; i < n - 1; i++)
        {
            back = back.next;
        }
        while (back.next != null)
        {
            previous = front;
            front = front.next;
            back = back.next;
        }
        if (previous != null)
        {
            previous.next = front.next;
        }
        else
        {
            head = head.next;
        }
        front = null;
        return head;
    }
}

Python参考代码:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # @return a ListNode
    def removeNthFromEnd(self, head, n):
        if not head:
            return None
        previous = None
        front = head
        back = head
        count = 1
        while count < n:
            back = back.next
            count += 1
        while back.next:
            previous = front
            front = front.next
            back = back.next
        if previous:
            previous.next = front.next
        else:
            head = head.next
        del front
        return head

Leetcode: Remove Nth Node From End of List

标签:leetcode

原文地址:http://blog.csdn.net/theonegis/article/details/44514751

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!