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