求一个单链表的中点
思路:
用两个指针,慢指针每次走一步,快指针每次走两步,当快指针结束时,慢指针所在的位置就是中点。
代码实现
主要方法:
public static node lookMid(node head){
//求中间节点,快慢指针
node low = head;
node fast = head;
while(fast != null && fast.next != null){
fast = fast.next.next;
low = low.next;
}
System.out.println("中间节点的值为:"+low.value);
return low;
}
测试程序:
//求一个单链表的中点
public class MidNode {
//节点类
static class node{
node next;
int value;
public node(int a){
this.value = a;
}
}
public static void main(String[] args) {
//创建链表
node head = new node(0);
node p = head;
for(int i=1;i<7;i++){ //自定义节点长度7
p.next = new node(i);
p = p.next;
}
//调用方法
lookMid(head);
}
}
输出:(自定义创建的链表为0-1-2-3-4-5-6,中间值3)
中间节点的值为:3