单链表的反转和找环

反转方法1

创建一个有头节点的链表 head,原链表 listNode,创建一个链表 m 代替 listNode;
1.将m.next存起来,因为后面操作时m.next会改变;
2.将head.next 接给 m.next(实现反转);
3.在将m接在 head.next下;
4.将存下来的m.next给m,重复操作;

        ListNode head = new ListNode(0);
        ListNode m = listNode;
        while(m!=null)
        {
           ListNode n= m.next;
            m.next=head.next;
            head.next=m;
            m=n;
        }
反转方法2

在原表 head 设立1个指针(m),m指向head.next;
1.新建一个节点 n, 指向 m.next(n即要变换的节点);
2.n.next 接给 m.next(准备将n前移);
3.再把head.next 接给 n.next;
4.把n接到head后面,重复操作

        ListNode m = head.next;
        while (m.next != null && m != null) {
            ListNode n = m.next;
            m.next = n.next;
            n.next = head.next;
            head.next = n;
        }
单链表找环

用快慢指针的方法判断单链表是否有环是比较便捷的;快指针走两步,慢指针走一步,两个指针相等是,即代表有环,这个这可以画图证明;且起始节点到环起始节点的距离 等于 两指针交点到环起始节点的距离,这也是可以证明的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值