给定链表的头结点head,整数a、b,实现删除链表的中间节点的函数,并实现删除位于a/b处节点的函数。
public class RemoveNode {
public class Node{
public int value;
public Node next;
public Node(int data){
value=data;
}
}
public Node removeMidNode(Node head){
if(head==null||head.next==null){
return head;
}
if(head.next.next==null){
return head.next;
}
Node pre=head;
Node cur=head.next.next;
while(cur.next!=null&&cur.next.next!=null){
pre=pre.next;
cur=cur.next.next;
}
pre.next=pre.next.next;
return head;
}
public Node removeByRatio(Node head,int a,int b){
if(a<1||a>b){
return head;
}
int n=0;
Node cur=head;
while(cur!=null){
n++;
cur=cur.next;
}
n=(int)Math.ceil(((double)(a*n))/(double)b);
if(n>1){
cur=head;
while(--n!=1){
cur=cur.next;
}
cur.next=cur.next.next;
}
return head;
}
}