循环链表的初始化,插入与删除
循环链表与普通链表相比,区别在于尾结点的next指向头结点,当链表为空时,头结点的next指向自身
代码如下:
链表的初始化:
package List;
public class circleLinklist {
public Node root;
public Node rnode;
public void initcircleLinklist(circleLinklist circleLinklist){
root=new Node();
root.next=root;
root.setData(null);
//添加时采用尾插法,定义rnode指向尾结点
rnode=new Node();
rnode.next=root;
}
链表的顺序添加:
public void circleLinklist_add(Object data){
Node node =new Node();
node.setData(data);
rnode.next.next=node;
node.next=root;
rnode.next=node;
System.out.println("添加的数据为:"+node.getData());
System.out.println("此时尾指针指向的数据为:"+rnode.next.getData());
}
运行结果:
链表的插入:
public void circleLinklist_insert(int n,Object data){
int i=1;
Node pnode=new Node();
Node node =new Node(data);
pnode=root;
while(i<n&&pnode.next!=root){
pnode=pnode.next;
i++;
System.out.println(pnode.getData());
}
if(i>=n){
node.next=pnode.next;
pnode.next=node;
System.out.println("插入的数据为:"+node.getData()+",前一个数据为:"+pnode.getData()
+",下一个数据为:"+node.next.getData());
}
if(pnode.next==root){
System.out.println("插入位置超过链长,已将其插入最后位置,位置为:"+i);
node.next=pnode.next;
pnode.next=node;
System.out.println("插入的数据为:"+node.getData()+",前一个数据为:"+pnode.getData()
+",下一个数据为:"+node.next.getData());
}
}
运行结果:
链表的删除:
public void circleLinklist_delete(int n){
int i=1;
Node pnode=new Node();
pnode=root;
while(i<n&&pnode.next!=root){
pnode=pnode.next;
i++;
}
if(i>=n){
System.out.println("删除的数据为第:"+i+"个,其数据为:"+pnode.next.getData());
pnode.next=pnode.next.next;
}
if(pnode.next==root){
System.out.println("删除位置超过链长,请重新输入");
}
}
运行结果:
链表的打印:
public void circleLinklist_print(){
//定义一个结点指向目前输出的位置
Node pnode =new Node();
pnode=root;
while (pnode.next!=root){
System.out.println("该结点的数据为:"+pnode.next.getData());
pnode=pnode.next;
}
}
全部代码:
package List;
public class circleLinklist {
public Node root;
public Node rnode;
public void initcircleLinklist(circleLinklist circleLinklist){
root=new Node();
root.next=root;
root.setData(null);
//添加时采用尾插法,定义rnode指向尾结点
rnode=new Node();
rnode.next=root;
}
public void circleLinklist_add(Object data){
Node node =new Node();
node.setData(data);
rnode.next.next=node;
node.next=root;
rnode.next=node;
System.out.println("添加的数据为:"+node.getData());
System.out.println("此时尾指针指向的数据为:"+rnode.next.getData());
}
public void circleLinklist_insert(int n,Object data){
int i=1;
Node pnode=new Node();
Node node =new Node(data);
pnode=root;
while(i<n&&pnode.next!=root){
pnode=pnode.next;
i++;
System.out.println(pnode.getData());
}
if(i>=n){
node.next=pnode.next;
pnode.next=node;
System.out.println("插入的数据为:"+node.getData()+",前一个数据为:"+pnode.getData()
+",下一个数据为:"+node.next.getData());
}
if(pnode.next==root){
System.out.println("插入位置超过链长,已将其插入最后位置,位置为:"+i);
node.next=pnode.next;
pnode.next=node;
System.out.println("插入的数据为:"+node.getData()+",前一个数据为:"+pnode.getData()
+",下一个数据为:"+node.next.getData());
}
}
public void circleLinklist_delete(int n){
int i=1;
Node pnode=new Node();
pnode=root;
while(i<n&&pnode.next!=root){
pnode=pnode.next;
i++;
}
if(i>=n){
System.out.println("删除的数据为第:"+i+"个,其数据为:"+pnode.next.getData());
pnode.next=pnode.next.next;
}
if(pnode.next==root){
System.out.println("删除位置超过链长,请重新输入");
}
}
public void circleLinklist_print(){
//定义一个结点指向目前输出的位置
Node pnode =new Node();
pnode=root;
while (pnode.next!=root){
System.out.println("该结点的数据为:"+pnode.next.getData());
pnode=pnode.next;
}
}
public static void main(String[] args){
circleLinklist cl=new circleLinklist();
cl.initcircleLinklist(cl);
cl.circleLinklist_add(1);
cl.circleLinklist_add(2);
cl.circleLinklist_add(3);
cl.circleLinklist_add(4);
cl.circleLinklist_print();
cl.circleLinklist_insert(6,5);
cl.circleLinklist_insert(3,6);
cl.circleLinklist_print();
cl.circleLinklist_delete(3);
cl.circleLinklist_print();
}
}