/*单循环链表 */
public class CircularLinkedList {
NodeInt rear = null;//尾结点
//链表增加节点
public void addNodeInt(int data) {
NodeInt newNode = new NodeInt(data);
if (rear == null) {
rear = newNode;
newNode.next=rear;
return ;
}
newNode.next=rear.next;//新结点指向头部
rear.next=newNode;//连接尾结点
rear=newNode;//替换尾结点
}
//删除结点的直接前驱结点
public void Delete(NodeInt rear,int data){
NodeInt p= rear;
NodeInt q= rear;
while (p.next.next.data!=data){
p=p.next;
}
while (q.next.data!=data){
q=q.next;
}
if(rear==q){
this.rear=p;//如果删除的是尾结点需要替换尾结点
}
p.next=q.next;
}
public NodeInt getRear(){
return rear;
}
//打印链表
public void show(){
NodeInt p =rear.next;
while(p != rear){
System.out.print(p.data+" ");
p=p.next;
}
System.out.println(p.data);
}
}
public class Test {
public static void main(String[] args) {
CircularLinkedList circularLinkedList = new CircularLinkedList();
Scanner sc=new Scanner(System.in);
System.out.println("输入数据个数:");
int k=sc.nextInt();
for (int i = 0; i < k; i++) {
circularLinkedList.addNodeInt(sc.nextInt());
}
circularLinkedList.show();
System.out.println("输入要删除的数据:");
int delete=sc.nextInt();
circularLinkedList.Delete(circularLinkedList.getRear(),delete);
System.out.println("删除后的链表:");
circularLinkedList.show();
}
}