一.相交链表
1.题目
给你两个单链表的头节点
headA
和headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null
。图示两个链表在节点
c1
开始相交**:**
2.题解
python
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
pA=headA
pB=headB
while pA!=pB:
pA=pA.next if pA else headB
pB=pB.next if pB else headA
return pA
二.反转链表
1.题目
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
2.题解
方法一:笨方法 反转存储到列表里,再根据这个列表新建一个链表
python
# 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=head
while pA:
vals.append(pA.val)
pA=pA.next
vals=vals[::-1]
if not vals:#避免空值导致后面访问空值越界
return None
dummy=ListNode(vals[0])#创建第一个节点
head2=dummy #创建头指针
for val in vals[1:]:#从第一个值开始而不是第0个
head2.next=ListNode(val)
head2=head2.next
return dummy
方法二:直接反转链表方向 (头插)
python
# 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=None
cur=head
while cur:
nxt=cur.next
cur.next=pre
pre=cur
cur=nxt
return pre
三.判断回文链表
1.题目
给你一个单链表的头节点 head
,请你判断该链表是否为回文链表。如果是,返回 true
;否则,返回 false
。
示例 1:

输入:head = [1,2,2,1]
输出:true
2.题解
回文链表反转存储在列表【】中
python
# 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.next
return vals==vals[::-1]