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,
Note:
Given n will always be valid.
Try to do this in one pass.
思路:先求到倒数K个节点的前一个节点,用两个指针,一个指针p1先走K步,再两个指针同时走。当p1的next是null时,另一个指针p2就是要删除节点的前一个节点要注意边界条件。
考查数据结构基本知识。
参考代码:
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
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
相关文章推荐
- LeetCode 19 — Remove Nth Node From End of List(C++ Java Python)
- leetcode_[python/C++]_19. Remove Nth Node From End of List(删除链表末第n个节点)
- [C++]LeetCode 19: Remove Nth Node From End of List(删除链表中倒数第n个节点)
- leetcode_c++:链表:Remove Nth Node From End of List(019)
- [leetcode] 19. Remove Nth Node From End of List python实现【easy】
- 【LeetCode-19】Remove Nth Node From End of List(C++)
- [LeetCode] 19. Remove Nth Node From End of List 删除链表的倒数第N个节点 @python
- Leetcode 19. Remove Nth Node From End of List(python)
- LeetCode 19. Remove Nth Node From End of List (Python)
- LeetCode 之 Remove Nth Node From End of List — C++ 实现
- LeetCode 19 Remove Nth Node From End of List (C,C++,Java,Python)
- 19. Remove Nth Node From End of List Leetcode Python
- LeetCode 19. Remove Nth Node From End of List(C++版)
- 【C++】【LeetCode】19. Remove Nth Node From End of List
- [C++]LeetCode: 4 Remove Nth Node From End of List
- 【Leetcode】【python】Remove Nth Node From End of List
- leetcode 019 Remove Nth Node From End of List (Python)
- [LeetCode]题解(python):019-Remove Nth Node From End of List
- LeetCode Remove Nth Node From End of List C++
- [leetcode]Remove Nth Node From End of List @ Python