题目
给定链表的头节点head,整数a和b,实现删除位于a/b处节点的函数。
链表:1->2->3->4->5,假设a/b的值为r |
如果r等于0,不删除任何节点 |
如果r在(0,1/5],删除节点1 |
如果r在(1/5,2/5],删除节点2 |
如果r在(2/5,3/5],删除节点3 |
如果r在(3/5,4/5],删除节点4 |
如果r在(4/5,1],删除节点5 |
如果r大于1,不删除任何节点 |
思路
设n为链表长度,对a/b*n进行向上取整后的数值,即为该删除的节点。
源码
public class Node{
public int value;
public Node next;
public Node(int data){
this.value=data;
}
}
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){
head=head.next;
}
if(n>1){
cur=head;
while(--n!=1){
cur=cur.next;
}
cur.next=cur.next.next;
}
return head;
}