您的位置:首页 > Web前端 > Node.js

Leetcode_remove-nth-node-from-end-of-list(c++ and python version)

2014-03-17 18:32 387 查看
地址:http://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 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.
思路:先求到倒数K个节点的前一个节点,用两个指针,一个指针p1先走K步,再两个指针同时走。当p1的next是null时,另一个指针p2就是要删除节点的前一个节点要注意边界条件。

考查数据结构基本知识。

参考代码:

/**
* 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) {
ListNode *p1 = head, *p2 = head;
while(n-- && p1)
{
p1 = p1->next;
}
if(!p1)
{
return head->next;
}
while(p1->next)
{
p1 = p1->next;
p2 = p2->next;
}
p2->next = p2->next->next;
return head;
}
};

python version:

# 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):
p1 = p2 = head
while n and p1:
p1 = p1.next
n -= 1
if not p1:
return head.next
else:
while p1.next:
p1 = p1.next;
p2 = p2.next;
p2.next = p2.next.next
return head
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: