题目:
设在一个带表头结点的单链表中所有元素结点的数据值按递增顺序排列,试编写一个函数,删除表中所有大于min小于max的元素(若存在)。
单链表的结构包括当前结点的数据域和指向下一结点的指针域。
首先,定义结点类的结构:
public class Node {
Node next = null;
int data;
public Node(int data){
this.data = data;
}
}
在链表类中,首先使用结点添加函数创建一个链表,然后通过遍历链表找到所有大于min且小于max的数据,调用删除结点函数删除相关数据结点,最后打印显示结果,代码如下:
public class List {
static Node head = null;
//添加结点
public static void addNode(int data){
Node newNode = new Node(data);
if(head == null){
head = newNode;
return;
}
Node temp = head;
while(temp.next != null){
temp = temp.next;
}
temp.next = newNode;
}
//删除节点
public static boolean deleteNode(int data){
if(head.data == data){
head = head.next;
return true;
}
else{
Node temp = head;
while(temp.next != null){
if(temp.next.data == data){
temp.next = temp.next.next;
return true;
}
temp = temp.next;
}
}
return false;
}
//打印链表
public static void printList(){
Node temp = head;
while(temp != null){
System.out.print(temp.data+" ");
temp = temp.next;
}
System.out.println();
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("请输入链表的长度:");
int length = in.nextInt();
int i;
System.out.println("请输入链表的"+length+"个数据(从小到大):");
for(i = 0;i < length;i++){
int d = in.nextInt();
addNode(d);
}
System.out.println("创建好的链表为:");
printList();
System.out.println("请输入要删除的下限min和上限max:");
int min = in.nextInt();
int max = in.nextInt();
Node temp = head;
for(i = 0;i < length;i++){
if(temp.data>min && temp.data<max){
deleteNode(temp.data);
}
temp = temp.next;
}
System.out.println("删除"+min+"到"+max+"之间数据后的链表为:");
printList();
}
}
测试部分数据结果如下: