输入一个单向链表,如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个。
public class Test_09_extend {
public static void main(String[] args) {
SignalList list= new SignalList();
int[] input = {1,2,3,4,5,6,7,8,9};
for(int i =0;i<input.length;i++){
list.add(input[i]);
}
if(findMiddle(list)==null){
System.out.println("结果为空!");
return ;
}
System.out.println(findMiddle(list).getKey());
}
public static Node findMiddle(SignalList list){
if(list == null){
return null;
}
Node fast = list.getHead();
Node slow = list.getHead();
while(fast.getNext()!=null&&fast.getNext().getNext()!=null){
fast = fast.getNext().getNext();
slow = slow.getNext();
}
return slow;
}
}
class Node{
private int key;
private Node next;
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
class SignalList{
Node head ;
Node tail;
public Node getHead() {
return head;
}
public void setHead(Node head) {
this.head = head;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
int size=0;
public void add(int i){
Node newnode = new Node();
newnode.setKey(i);
if(size == 0){
head = newnode;
tail = newnode;
size++;
}
else{
tail.setNext(newnode);
tail = newnode;
size++;
}
}
}
输出结果:5