力扣-链表相关题 持续更新中。。。。。。
一.相交链表
1.题目
160. 相交链表 - 力扣(LeetCode)
给你两个单链表的头节点
headA
和headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null
。图示两个链表在节点
c1
开始相交:
2.题解
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = Noneclass Solution(object):def getIntersectionNode(self, headA, headB):""":type head1, head1: ListNode:rtype: ListNode"""pA=headApB=headBwhile pA!=pB:pA=pA.next if pA else headBpB=pB.next if pB else headAreturn pA
二.反转链表
1.题目
206. 反转链表 - 力扣(LeetCode)
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
2.题解
方法一:笨方法 反转存储到列表里,再根据这个列表新建一个链表
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):def reverseList(self, head):""":type head: Optional[ListNode]:rtype: Optional[ListNode]"""vals=[]pA=headwhile pA:vals.append(pA.val)pA=pA.nextvals=vals[::-1]if not vals:#避免空值导致后面访问空值越界return Nonedummy=ListNode(vals[0])#创建第一个节点head2=dummy #创建头指针for val in vals[1:]:#从第一个值开始而不是第0个head2.next=ListNode(val)head2=head2.nextreturn dummy
方法二:直接反转链表方向 (头插)
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):def reverseList(self, head):""":type head: Optional[ListNode]:rtype: Optional[ListNode]"""pre=Nonecur=headwhile cur:nxt=cur.nextcur.next=prepre=curcur=nxtreturn pre
三.判断回文链表
1.题目
234. 回文链表 - 力扣(LeetCode)
给你一个单链表的头节点 head
,请你判断该链表是否为回文链表。如果是,返回 true
;否则,返回 false
。
示例 1:
输入:head = [1,2,2,1] 输出:true
2.题解
回文链表反转存储在列表【】中
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):def isPalindrome(self, head):""":type head: Optional[ListNode]:rtype: bool"""vals=[]while head:vals.append(head.val)head=head.nextreturn vals==vals[::-1]