单链表

  1. 环形链表 II
    在这里插入图片描述
    思路1:先把数据遍历循环到列表里边,然后在里边查找,如果能找到则输出
class Solution(object):
    def detectCycle(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        
        a =[]
        while head:            
            if head in a:
                return head
            else:
                a.append(head)
            head = head.next
        return None

在这里插入图片描述
思路2:无环的直接返回None,有环的情况:快节点以2v的速度走,慢节点以v的速度走,二者终会在某节点相遇。快节点比慢节点多走的环形部分长v(相遇点到相遇点),v也是head到相遇点长度,环入口到相遇点是公共部分,减去后相遇点到环入处距离等于head到环入口,所以根据相遇点距环入口的距离等于头节点距环入口的距离。
所以相遇之后就让快节点重新从head开始,它们再次相遇的地方就是入口。

class Solution(object):
    def detectCycle(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        slow = fast = head
        while fast and fast.next:
            a =[]
            a.append(slow)
            fast = fast.next.next
            slow = slow.next
            
            if slow is fast:
                fast = head
                while fast is not slow:
                    fast = fast.next
                    slow = slow.next
                return fast
        return None

在这里插入图片描述
206. 反转链表
在这里插入图片描述
迭代

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        prev = cur = None
        if head:
            prev = head
            cur = head.next
            prev.next = None
        else:
            return None
        while cur:
            tmp = cur
            cur = cur.next
            tmp.next = prev
            prev = tmp
        return prev

在这里插入图片描述

链表:
链表是动态分配存储空间的链式存储结构。

其包括一个“头指针”变量,其中第0个结点称为整个链表的头结点,头结点中存放一个地址,该地址指向一个元素,头结点一般不存放具体数据,只是存放第一个结点的地址。

链表中每一个元素称为“结点”,每个结点都由两部分组成:存放数据元素的数据域和存储直接后继存储位置的指针域。指针域中存储的即是链表的下一个结点存储位置,是一个指针。多个结点链接成一个链表。

最后一个结点的指针域设置为空(NULL),作为链表的结束标志,表示它没有后继结点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值