给定链表的头结点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;
}
}
本文介绍了一种链表节点删除算法,包括删除中间节点的方法及按比例删除指定位置节点的功能。提供了一个名为RemoveNode的类,包含两个核心方法:removeMidNode用于删除中间节点;removeByRatio则根据输入的比例参数a/b来确定要删除的节点位置。

9605

被折叠的 条评论
为什么被折叠?



