无要求,解决方法多种。
思路总结:
遍历得到链表长度,p.next = p.next.next。
收获:
强制类型转换,int a = (int) b;
public class Main {
public static class Node {
public int value;
public Node next;
public Node() { this.next = null; }; //初始化一个空链表
public Node(int value) { this.value = value; }
}
public static Node CreatNewLinkedList(Node head, int[] a) {
System.out.print("List is: ");
Node r = head;
for (int i : a) {
Node p = new Node(i);
r.next = p;
p.next = null;
r = r.next;
System.out.print(p.value + " ");
}
System.out.println();
return head;
}//尾插法
public static Node RemoveMiddleNode(Node node) {
double Middle = 0;
if (node == null || node.next == null) {
return node;
}
Node p = node;
while (p != null) {
Middle++;
p = p.next;
}
p = node;
double Middle1 = Middle;
Middle1 = Middle1 % 1;
int Middle2 = (int) Middle; //强制类型转换
Middle2 /= 2;
if (Middle1 == 0) {
while (Middle2-- != 1) {
p = p.next;
}
p.next = p.next.next;
}
if (Middle1 == 0.5) {
while (Middle2 != 0) {
Middle2--;
p = p.next;
}
p.next = p.next.next;
}
return node;
}
public static Node RemoveMiddleNode(Node node, int a, int b) {
double length = 0;
if (node == null || node.next == null) {
return node;
}
Node p = node;
while (p != null) {
length++;
p = p.next;
}
//System.out.println(length);
p = node;
double Deleteth = (double) a/b;
if (Deleteth > 0 && Deleteth <= 1/length) {
node = node.next;
}
for (int i = 1; i < (length - 1); i++) {
p = p.next;
if (Deleteth > i/length && Deleteth <= (i+1)/length) {
p.next = p.next.next;
}
}
if (Deleteth > (length - 1)/length && Deleteth <= 1) {
p.next = null;
}
return node;
}
public static void PrintLinkedList(Node node) {
System.out.print("List is: ");
while (node != null) {
System.out.print(node.value + " ");
node = node.next;
}
System.out.println();
}
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5, 6, 8, 9, 10};
Node head = new Node();
CreatNewLinkedList(head, a);
head = head.next;
//System.out.println(head2.next.next.value);
head = RemoveMiddleNode(head);
PrintLinkedList(head);
System.out.println("============");
head = RemoveMiddleNode(head, 1, 8);
PrintLinkedList(head);
}
}