版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010369338/article/details/71535257
循环链表和单向链表的不同之处在于 :
单向链表tail.next指向null;
而循环链表tail.next指向head;
循环链表类:
public class CLink {
public Node head;
public CLink() {
this.head = new Node();
head.next = head;
}
public void andNode(String name) {
/**
* 创建需要and的节点
*/
Node and = new Node(name,null);
Node p;
if(head.next == head) { //空表
and.next = head;
head.next = and;
}else {
p = head; //首节点
while (p.next != head) {//向下遍历
p = p.next;
}
and.next = p.next;
p.next = and;
}
}
public boolean delNode(String name) {
Node p = head;
while (p.next != head) {
if(p.next.name.equals(name)) {
p.next = p.next.next;
return true;
}else {
p = p.next;
}
}
return false;
}
/**
* data 之前插入节点
* @param data
* @param name
* @return
*/
public boolean insertNode(String data,String name) {
Node p = head;
Node insertNode = new Node(name, null);
while (p.next != head) {
if(p.next.name.equals(data)) {
insertNode.next = p.next;
p.next = insertNode;
return true;
}
p = p.next;
}
return false;
}
public int size() {
Node p = head;
int size = 0;
while (p.next != head) {
p = p.next;
size ++;
}
return size;
}
public void display() {
Node p = head;
while (p.next != head) {
p = p.next;
System.out.println(p.name);
}
}
}
节点类:
public class Node {
public String name;
public Node next;
public Node(String name, Node next) {
this.name = name;
this.next = next;
}
public Node() {
this.next = null;
}
}
测试代码:
CLink cLink = new CLink();
cLink.andNode("1");
cLink.andNode("2");
cLink.andNode("3");
cLink.display();
System.out.println("-------------------------");
cLink.delNode("2");
cLink.display();
System.out.println("-------------------------");
System.out.println("size : " + cLink.size());
cLink.insertNode("3","2");
cLink.display();