链表问题3——删除链表的a/b处的节点(进阶)

题目

给定链表的头节点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;
}
发布了43 篇原创文章 · 获赞 21 · 访问量 4920

猜你喜欢

转载自blog.csdn.net/flying_1314/article/details/103836893