21.合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
#两个都是升序列表
S=p=ListNode(None)
while list1 and list2:
if list1.val <= list2.val:
p.next=ListNode(list1.val)
p=p.next
if list1:list1=list1.next
else:
p.next=ListNode(list2.val)
p=p.next
if list2:list2=list2.next
while list1:
p.next=ListNode(list1.val)
p=p.next
if list1:list1=list1.next
while list2:
p.next=ListNode(list2.val)
p=p.next
if list2:list2=list2.next
return S.next
83.删除排序链表中的重复元素
给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
# 链表已排序
# s和head都指向了表头,s跟着head更新
s=head
while head and head.next:
if head.val==head.next.val:
# 当前节点指向(head.next)下一个节点的下一个节点(head.next.next)
head.next=head.next.next
else:
# 如果前后两个节点不相同,则移到下一步继续判断
head=head.next
return s