当前位置: 首页 > wzjs >正文

深圳网站建设计站长之家新网址

深圳网站建设计,站长之家新网址,山东东营市天气预报,网站怎么上传两两交换链表中的节点 题目示意: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 原先我的思路是图像上的思路,但是我感觉还是很复杂…

两两交换链表中的节点

题目示意:

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

原先我的思路是图像上的思路,但是我感觉还是很复杂,

思路1:

原代码:
class ListNode:def __init__(self,data=0,next=None):self.value = dataself.next = next
class MylinkList:def __init__(self):self.dummy_head = ListNode()self.size = 0def addAtHead(self,index:int)->None:self.dummy_head = ListNode(index,self.dummy_head.next)self.size += 1def printList(self)->None:current = self.dummy_headwhile current:print(current.value,end = "->" if current.next else "")current = current.nextprint()def swapList(self)->None:if self.size <= 1:print("元素太少不进行翻转")returnelse:current_1 = self.dummy_head.nextcurrent_2 = current_1.nextcurrent_3 = current_2.nextself.dummy_head.next = current_2current_2.next = current_1current_1.next = current_3for i in range(1,self.size // 2):# 更新指针temp = current_1current_2 = current_3.nextcurrent_1 = current_3current_3 = current_2.next# 交换位置temp.next = current_2current_2.next = current_1current_1.next = current_3# 开始调用函数
obj = MylinkList()
obj.addAthead(1)
obj.addAthead(10)
obj.addAthead(2)
obj.addAthead(3)
obj.addAthead(21)
obj.addAthead(4)
obj.addAthead(33)
obj.printList()
obj.swapList()
obj.printList()
报错:

AttributeError: 'NoneType' object has no attribute 'next'

这个报错主要是因为在current_3的时候很可能是空的,所以我们需要修改代码,同时还有一些其他的错误,主要是对代码的掌控能力还不够:

代码修正:
    def addAtHead(self,index:int)->None:self.dummy_head.next = ListNode(index,self.dummy_head.next)self.size += 1

不可以修改头节点

原代码修改后:
class ListNode:def __init__(self,data=0,next=None):self.value = dataself.next = next
class MylinkList:def __init__(self):self.dummy_head = ListNode()self.size = 0def addAtHead(self,index:int)->None:self.dummy_head.next = ListNode(index,self.dummy_head.next)self.size += 1def printList(self)->None:current = self.dummy_headwhile current:print(current.value,end = "->" if current.next else "")current = current.nextprint()def swapList(self)->None:if self.size <= 1:print("元素太少不进行翻转")return# 使用虚拟头结点简化current_1 = self.dummy_headcurrent_2 = current_1.nextcurrent_3 = current_2.nextwhile current_1.next!=None and current_1.next.next!=None:current_2.next = current_3.nextcurrent_3.next = current_2current_1.next = current_3#交换current_1 = current_3current_2 = current_1.next if current_1 else Nonecurrent_3 = current_2.next if current_2 else None# 开始调用函数
obj = MylinkList()
obj.addAtHead(1)
obj.addAtHead(10)
obj.addAtHead(2)
obj.addAtHead(3)
obj.addAtHead(21)
obj.addAtHead(4)
obj.addAtHead(33)
obj.printList()
obj.swapList()
obj.printList()
思路2:
代码:
class ListNode:def __init__(self,data=0,next=None):self.value = dataself.next = nextclass MylinkList:def __init__(self):self.dummy_head = ListNode()self.size = 0def addAtHead(self,index:int)->None:self.dummy_head.next = ListNode(index,self.dummy_head.next)self.size += 1def printList(self)->None:current = self.dummy_headwhile current:print(current.value,end = "->" if current.next else "")current = current.nextprint()def swapList(self)->None:if self.size <= 1:print("元素太少不进行翻转")returncurrent = self.dummy_headtemp_1 = current.nexttemp_2 = temp_1.nextwhile current.next and current.next.next:temp_1.next = temp_2.nexttemp_2.next = temp_1current.next = temp_2current = temp_2 if temp_2 else Nonetemp_1 = current.next if current else Nonetemp_2 = temp_1.next if temp_1 else None# 开始调用
obj = MylinkList()
obj.addAtHead(1),obj.addAtHead(2),obj.addAtHead(3),obj.addAtHead(10)
obj.addAtHead(15),obj.addAtHead(16),obj.addAtHead(20)
obj.printList()
obj.addAtHead(35)
obj.printList()
obj.swapList()
obj.printList()

删除链表的倒数第N个节点

题目示意:

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

进阶思考:

你能尝试使用一趟扫描实现吗?

链表的题建议大家画图来思考:

针对删除的代码:

def deleteN(self,index:int)->None:if index>self.size:print("超出了链表的范围")returnelse:current = self.dummy_headfor i in range(0,index-1):current = current.nextprint(current.next.value)current.next =current.next.nextself.size -= 1

完整的代码:

class ListNode:def __init__(self,data=0,next=None):self.value = dataself.next = nextclass MylinkList:def __init__(self):self.dummy_head = ListNode()self.size = 0def addAtHead(self,index:int)->None:self.dummy_head.next = ListNode(index,self.dummy_head.next)self.size += 1def printList(self)->None:current = self.dummy_head.nextwhile current:print(current.value,end = "->" if current.next else "")current = current.nextprint()def swapList(self)->None:if self.size <= 1:print("元素太少不进行翻转")returncurrent = self.dummy_headtemp_1 = current.nexttemp_2 = temp_1.nextwhile current.next and current.next.next:temp_1.next = temp_2.nexttemp_2.next = temp_1current.next = temp_2current = temp_2 if temp_2 else Nonetemp_1 = current.next if current else Nonetemp_2 = temp_1.next if temp_1 else Nonedef deleteN(self,index:int)->None:if index>self.size:print("超出了链表的范围")returnelse:current = self.dummy_headfor i in range(0,index-1):current = current.nextprint(current.next.value)current.next =current.next.nextself.size -= 1# 开始调用
obj = MylinkList()
obj.addAtHead(1),obj.addAtHead(2),obj.addAtHead(3),obj.addAtHead(10)
obj.addAtHead(15),obj.addAtHead(16),obj.addAtHead(20)
obj.printList()
obj.addAtHead(35)
obj.printList()
obj.swapList()
obj.printList()
obj.deleteN(4)
obj.printList()

链表相交

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

示例 1:

此题暂时留作思考题,希望大家都思考思考

http://www.dtcms.com/wzjs/288092.html

相关文章:

  • 购物网站设计公司深圳靠谱网站建设公司
  • 网站建设基本常识网络营销产品策略分析
  • 福永镇网站建设网络营销大赛策划书
  • wordpress 文章收费seo排名怎么样
  • 经典的公司简介百度关键词优化是什么意思
  • 做一个购物网站要多少钱学it学费大概多少钱
  • 公司公众网站微信平台建设方案论坛推广的步骤
  • 来推网站百度浏览器网站入口
  • 织梦cms和帝国cmswin7优化
  • 在华图做网站编辑网络推广费用
  • 如何做招聘网站对比分析电脑优化大师官方免费下载
  • 建设网站团队如何快速搭建一个网站
  • 网站开发哪里便宜人工在线客服
  • 食品网站设计网站建设费用明细表
  • 怎么在百度搜索自己的网站站长工具箱
  • 泰州市住房和城乡建设局官方网站怎么样引流顾客到店方法
  • 郑州做网站的专业公司有哪些口碑营销成功案例简短
  • 网站的推广兰州网络seo
  • 长沙建网站的公司一对一定制方案百度推广平台登陆
  • 静海网站建设制作百度代发排名
  • 做海报哪个网站好站长工具查询系统
  • 公司注册信息查询鹤岗网站seo
  • 徐州网站制作需要多少钱上海小红书seo
  • 深喘旋磨做紧夹断妖精网站百度问答平台
  • 网站建设第三方百度知道提问首页
  • 网站建设报价方案对比网页制作的步骤
  • 网站自助平台软文宣传
  • 宣传片制作app优化大师的功能有哪些
  • 上海移动官网网站建设抖音代运营收费详细价格
  • 台州网站建设 网站制作 网站设计石家庄头条今日头条新闻