链表
目录
一,逆序链表
1,逆序链表
P206 easy
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
new = None
while head:
# 保存当前节点指向的下一个值
temp = head.next
# 当前节点指针指向前面的节点
head.next = new
# 前一个节点往后移到当前节点
new = head
# 当前节点往后移到下一个节点
head = temp
return new
2,反向指定链表
P92 medium
思路:
定义result=head,然后找到左节点的前驱和左节点,右节点的后继和右节点。然后反转左到右,再将前驱和后继的指针指向对应方向。最后输出result
class Solution(object):
def reverseBetween(self, head, left, right):
"""
:type head: ListNode
:type left: int
:type right: int
:rtype: ListNode
"""
# 定义左前驱节点
pre_node = None
计算步长
change_len = right-left+1
# 最后输出的链表
result = head
# 遍历链表直到左前驱节点,并赋值给pre_node
for _ in range(left-1):
pre_node = head
head = head.next
# 定义右节点mode_node
mode_node = head
next_node = None
# 反转链表
for _ in range(change_len):
temp = head.next
head.next = next_node
next_node = head
head = temp
# 反转后右节点的指针指向当前节点
mode_node.next = head
# 判断不是从第一个节点逆序的
if pre_node:
pre_node.next = next_node
# 为空说明从第一个开始逆序,结果即逆置后的节点
else:
result = next_node
return result
二,环形链表
1,判断是否环形链表
P141 easy
思路:
设置一个set集合,存储遍历过的head,若在set里有,则是环形
class Solution(object):
def hasCycle(self, head):
"""
:type head: ListNode
:rtype: bool
"""
2,输出环形链表位置
P142 medium
思路:
使用快慢指针,找出快慢指针的相遇的位置,然后从初始节点和相遇位置一起往前走,走到相遇的位置就是环形的位置:
三,相交链表
1,找出两个链表相交的节点值
P160 easy
思路:
先计算出两个链表的长度,再减去长的那块,再遍历两个链表,相等的地方即交点
四,排序
1,两个链表在指定数字下合成一个有序链表
P86 medium
思路:
通过临时链表,less和more,遍历head,小于指定数字的连接到less链表上,大于的放到more链表。最后将less链表和more链表连接起来,输出
2,合并有序链表
P21 easy
思路:
同上,存到临时链表中

浙公网安备 33010602011771号