leetcoot21

目录

递归;迭代

链表实现


递归;迭代

递归

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        if l1 is None:
            return l2
        if l2 is None:
            return l1
        if l1.val < l2.val:
            l1.next = self.mergeTwoLists(l1.next, l2)
            return l1
        else:
            l2.next = self.mergeTwoLists(l2.next, l1)
            return l2

迭代

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        prevhead = ListNode(-1)
        prev = prevhead 
        while l1 and l2:
            if l1.val <= l2.val:
                prev.next = l1
                l1 = l1.next
            else:
                prev.next = l2
                l2 = l2.next
            prev = prev.next

        prev.next = l1 if l2 is None else l2
        return prevhead.next

链表实现

1.创建‘结点’类

# coding=utf-8

class Node():
	def __init__(self, elem):
		self.elem = elem	#节点内容
		self.next = None	#节点指向

2.创建‘单链表’类

# coding=utf-8

class SingleLinkList():
	def __init__(self, Node = None):
		self._head = None	#“单链表共同属性,头结点“
	def add(self, item):
		node = Node(item)
		node.next = self._head	#将这个新node指向原链表头结点
		self._head = node		#将node赋值给头结点
	def append(self, item):
		node = Node(item)
		if self.is_empty():
			self.add(item)
		else:
			cur = self._head
			while cur.next != None:
				cur = cur.next
			cur.next = node
	def is_empty(self):
		return self._head == None
	def insert(self,pose,item):
		if pose <= 0:
			add(item)
		elif pose >= self.length()-1:
			self.append(item)
		else:
			node = Node(item)	
			cnt = 1				
			cur = self._head	
			pre = None
			while cur != pose:
				pre = cur		
				cur = cur.next	
				cnt += 1		
			cur = node			#将指定位置内容变成node
			cur.next = pre.next	#将前一结点储存的地址给node
			pre.next = cur		#再将前一结点指向node
	def length(self):
		cur = self._head
		cnt = 0
		while cur != None:
			cnt += 1
			cur = cur.next
		return cnt
	def remove(self, item):
		if self.is_empty():
			print("List is empty!")
		else:
			cur = self._head
			pre = None
			while cur.elem != item:
				pre = cur	
				cur = cur.next
			pre.next = cur.next		#将要删结点存储的地址给前一结点
			print("Deleted Succcessfully!")
			del cur					#再将结点删除
	def travel(self):
		cur = self._head
		while cur!= None:
			print(cur.elem, end=' ')
			cur = cur.next
	def search(self,item):
		cur = self._head
		while cur.elem != item:
			cur = cur.next
		print("Search Succeeded!")

if True:            
	l = SingleLinkList()    #创建一个实例
	print(l.is_empty())
	print(l.length())
	l.append(1)
	print(l.is_empty())
	print(l.length())
	l.add(0)
	l.append(2)
	l.append(3)
	l.append(4)
	l.append(5)
	l.append(6)
	l.insert(255,100)
	l.travel()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值