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.
这个题的思路就是用两个指针p和q指向head,然后q向后移动n步,进入循环,p和q同时向后移动,直到q.next为空,去掉p后面的节点。还有就是对于q为空,q.next不存在进行特殊讨论下。
leetcode提交代码
class Solution():
def removeNthFromEnd(self, head, n):
p=head
q=head
while n!=0:
q=q.next
n=n-1
if q==None :
return head.next
while q.next!=None:
p=p.next
q=q.next
r=p.next
p.next=r.next
return head
另外附上可以检验的代码
# -*- coding: utf-8 -*
class Node(object):
def __init__(self,val,p=None):
self.data = val
self.next = p
class list(object):
def __init__(self): #头节点为0
self.head = 0
def initlist(self,data):
self.head = Node(data[0])
p = self.head
for i in data[1:]:
node = Node(i)
p.next = node
p = p.next
class Solution():
def removeNthFromEnd(self, head, n):
p=head
q=head
while n!=0:
q=q.next
n=n-1
if q==None :
return head.next
while q.next!=None:
p=p.next
q=q.next
r=p.next
p.next=r.next
return head
def shuchu(self,head):
p=head
while p!=None:
print p.data
p=p.next
s = Solution()
l=list()
l.initlist([1,2,3,4])
p=s.removeNthFromEnd(l.head,3)
s.shuchu(p)