链表不具有的特点是( ),链表反转
1.合并两个有序链表,纽克
力扣
将两个升序列表合并成一个新的升序列表并返回。通过拼接给定的两个链表的所有节点来形成新的链表。
示例1:
输入:l1=[1,2,4],l2=[1,3,4]
产出:[1,1,2,3,4,4]
输入:l1=[],l2=[]
输出:[]
输入:l1=[],l2=[0]
输出:[0]
解决方案:
哨兵的作用是方便的得到最后一个链表,也就是一个虚拟头节点。
从键入导入可选
类别列表节点:
def __init__(self,val=0,next=None):
self.val=val
self.next=下一个
类别解决方案:
def mergetwolits(self,list1:可选[ListNode],list2:可选[ListNode]) -可选[ListNode]:
#设置前哨节点(虚拟头节点),将较小的节点连接到这个前哨节点,最后返回prehead.next
preHead=ListNode(-1)
Pre=preHead # pre指针,用于连接链表(指针或光标)
l1=列表1
l2=列表2
而l1和l2:
#将具有较小值的节点连接到pre指针
如果l1.val l2.val:
pre.next=l1
l1=l1 .下一个
否则:
pre.next=l2
l2=l2 .下一个
Pre=pre.next #节点移动
如果l1:
pre.next=l1
如果l2:
pre.next=l2
返回preHead .下一个
参考:3359blog.csdn.net/weixin _ 4346639/文章/详情/124000412
2.移除链接列表元素
23.移除链接列表元素。
给你一个链表的头节点和一个整型值。请删除链表中所有满足Node.val==val的节点,返回新的头节点。
示例1:
输入:head=[1,2,6,3,4,5,6],val=6
产出:[1,2,3,4,5]
示例2:
输入:head=[],val=1
输出:[]
示例3:
输入:head=[7,7,7,7],val=7
输出:[]
列表中的节点数在[0,104]范围内
1=节点值=50
0=val=50
解决方案:
#单链表的定义。
#类别列表节点:
# def __init__(self,val=0,next=None):
# self.val=val
# self.next=下一个
类别解决方案:
def removeElements(self,head: ListNode,val: int) - ListNode:
Dummy=ListNode(next=head) #虚拟头节点或哨兵节点,其下一个节点指向头头节点。
Cur=dummy #相当于一个光标或者指针,一直在移动。
下一个!=无:
if cur.next.val==val:
Cur.next=Cur.next.next #如果等于目标元素,则指向cur。下一个节点的下一个,然后移除该节点。
否则:
下一个
返回假人,下一个
3.反转链表
26.反转链表
给你单链表的头节点,请倒链表,返回倒链表。
示例1:
输入:head=[1,2,3,4,5]
输出:[5,4,3,2,1]
示例2:
Input: head=[1,2]
输出:[2,1]
示例3:
Input: head=[]
输出:[]
提示:
链表中节点的数量范围是[0,5000]
-5000=节点. val=5000
问题1:双指针
#单链表的定义。
#类别列表节点:
# def __init__(self,val=0,next=None):
# self.val=val
# self.next=下一个
类别解决方案:
def reverseList(self,head: ListNode) - ListNode:
Cur=head #头节点
Pre=None #上一个节点,最初为空
一边诅咒!=无:
Tmp=cur.next #保存下一个节点
Cur.next=pre #反转,下一个节点指向上一个节点。
#更新节点
Pre=cur #移动
Cur=tmp #移动,相当于cur=cur.next
Return pre # pre最终会移动到最后一个节点,所以只需返回pre。
问题2:递归方法
类别解决方案:
def reverseList(self,head: ListNode) - ListNode:
定义反转(前,当前):
如果不弯曲:
返回前
tmp=cur.next
cur.next=pre
反向返回(电流、温度)
反向返回(无,头)
参考:翻转链接列表
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。