地址: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.
考查数据结构基本知识。
参考代码:
/**
* 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