Swap Nodes in Pairs
还是设置一个头结点比较好操作,直接操作不太顺利。。。
class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None or head.next is None:
return head
dummy = ListNode(0); dummy.next = head
p = dummy
while p.next and p.next.next:
tmp = p.next.next
p.next.next = tmp.next
tmp.next = p.next
p.next = tmp
p = p.next.next
return dummy.next
Reverse Nodes in k-Group
class Solution(object):
def reverseKGroup(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
if head is None or head.next is None:
return head
dummy=ListNode(0);dummy.next=head
p=dummy
s=[None for i in range(k)]
while True:
temp=0
tmp=p
for i in range(k):
if tmp==None or tmp.next==None:
temp+=1
break
tmp=tmp.next
if temp>0:
break
else:
q=p
for i in range(k):
s[i]=q.next
q=q.next
s[0].next=s[k-1].next
for i in range(k-1,0,-1):
s[i].next=s[i-1]
p.next=s[k-1]
p=s[0]
return dummy.next
Remove Duplicates from Sorted Array
有一条要求是 不要为另一个数组分配额外的空间,您必须使用常量内存来执行此操作。
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums)==0:
return 0
j=0
for i in range(len(nums)):
if nums[i]!=nums[j]:
nums[i],nums[j+1]=nums[j+1],nums[i]
j+=1
print nums
return j+1
Remove Element
去掉数组中等于val的元素,返回新的数组长度,数组中的元素不必保持原来的顺序。使用头尾指针,头指针碰到val时,与尾指针指向的元素交换,将elem都换到数组的末尾去。
class Solution(object):
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
if len(nums)==0:
return 0
j=len(nums)-1
for i in range(len(nums)-1,-1,-1):
if nums[i]==val:
nums[i],nums[j]=nums[j],nums[i]
j-=1
print nums
return j+1