链表相关..

反转

遍历

找中间节点

大文件(GB级别)搜索、查找及优化查找速度的方法

目录

1. 判断单链表有环

2. 统计有环单链表结点个数

3. 单链表反转


1. 判断单链表有环


    构造链表
    设定快慢两个指针
    慢指针=快指针返回true

class LNode:
    def __init__(self, elem):
        self.elem = elem
        self.pnext = None

def exitLoop(LList):
    p1 = p2 = LList
    while p2 and p2.pnext: #当链表为空或者只有一个结点时,就不执行循环体里的程序,返回False
        p1 = p1.pnext
        p2 = p2.pnext.pnext
        if p1 == p2:
            return True
    return False


if __name__=="__main__":
    LList = LNode(1)
    p1 = LNode(2)
    p2 = LNode(3)
    p3 = LNode(4)
    p4 = LNode(5)
    p5 = LNode(6)
    LList.pnext = p1
    p1.pnext = p2
    p2.pnext = p3
    p3.pnext = p4
    p4.pnext = p5
    p5.pnext = p2
    print(exitLoop(LList))


 

2. 统计有环单链表结点个数


https://blog.csdn.net/nwpulei/article/details/8126359

3. 单链表反转

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

def reverse_linkedlist(head):
    if head is None or head.next is None:
        return head
    else:
        new_head = reverse_linkedlist(head.next) # 指针迭代到底,new_head指向链表最后一个结点,做为新链表头。此时head指向原链表最后一个结点的前一个结点。然后从原链表最后面的两个结点开始反转,依次向前
        head.next.next = head # head指向原链表倒数第二个,head.next指向倒数第一个(也就是new_head),这句目的是让new_head的next指向原链表的倒数第二个,即实现了一次反转
        head.next = None # 反转一次之后,将原链表中前一个结点(如倒数第二个)指向后一个结点(如倒数第一个)的指向关系断开,防止形成环
    return new_head

head = ListNode(1)               #测试代码
p1 = ListNode(2)                 # 建立链表1->2->3->4->None
p2 = ListNode(3)
p3 = ListNode(4)
head.next = p1
p1.next = p2
p2.next = p3
new_head = None
p = reverse_linkedlist(head)           #输出链表4->3->2->1->None
while p:
	print(p.val, end=' ') # end参数让多个print显示在同一行,空格分隔
	p = p.next

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值