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