1、输入一个链表,反转链表后,输出链表的所有元素。
2、输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
class Node():
__slots__=['_elem','_next']#限定Node实例的属性
def __init__(self,elem,next1=None):
self._elem=elem
self._next=next1#Node的指针部分默认指向None
class SingleLinkedList():
def __init__(self):#初始化为空链表
self._head=None
def append2(self,elem):#在链表后端添加元素
if self._head is None:
self._head=Node(elem)
return#这里很重要,如果不写,会多一个
p=self._head
while p._next:
p=p._next
p._next=Node(elem)
def ReverseList(self, pHead):#反转链表,注意last
if pHead==None:
return None
if pHead and pHead._next==None:
return pHead
last=None
while pHead:
tmp = pHead._next
pHead._next=last
last = pHead
pHead = tmp
return last
def merge1(self, pHead1, pHead2):#offer-17递归合并
p=None
if pHead1==None:
return pHead2
if pHead2==None:
return pHead1
if pHead1._elem>pHead2._elem:
p=pHead2
p._next=SingleLinkedList().merge1(pHead1,pHead2._next)
else:
p=pHead1
p._next=SingleLinkedList().merge1(pHead1._next,pHead2)
return p
def merge2(self,phead1,phead2):#非递归合并
p=Node(90)#在这儿多加一个头结点,比较好存储
q=p
while phead1 and phead2:
if phead1._elem>phead2._elem:
p._next=phead2
phead2=phead2._next
else:
p._next=phead1
phead1=phead1._next
p=p._next
if phead1==None:
p._next=phead2
elif phead2==None:
p._next=phead1
return q._next
a=SingleLinkedList()
for i in range(1,4):
a.append2(2*i-1)
b=SingleLinkedList()
for j in range(1,4):
b.append2(2*j)
#1、反转test
print (a.ReverseList(a._head)._elem)
#2、归并
c=SingleLinkedList().merge1(a._head,b._head)
while c:
print (c._elem)
c=c._next