Given a linked list, remove the n-th node from the end of list and return its head.
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.
Follow up:
Could you do this in one pass?
"""
第一次:遍历链表中的每一个元素,用辅助变量t判断是否是倒数第n个,分三种情况:n<length,按部就班的找;n>length,返回整个链表;n=length,从链表的第二个开始返回。
"""
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): def removeNthFromEnd(self, head, n): """ :type head: ListNode :type n: int :rtype: ListNode """ if head == None: return None if head.next == None and n == 1: return None prob = head while prob: p = prob t = n while t + 1: if t == 0 and p == None: #n=length return head.next if t == 0 and p.next != None: #n<length prob = prob.next if t == 0 and p.next == None: #n<length prob.next = prob.next.next return head if t!= 0 and p == None: #n>length return head p = p.next t = t - 1
"""
Runtime: 24 ms, faster than 77.63% of Python online submissions for Remove Nth Node From End of List.
Memory Usage: 11.8 MB, less than 5.26% of Python online submissions for Remove Nth Node From End of List.
"""
create链表的语句:
def create(n):
head = ListNode(0)
p = head
for i in range(1, n + 1):
p.next = ListNode(i)
p = p.nextreturn head.next