晋城市住建设局网站茂名公司网站设计
一.相交链表
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]


