带头节点的双链表及其基本操作(Java实现)
程序员文章站
2022-03-16 08:53:25
...
package lwh.linearlist.linklist;
public class DbNode {
protected int e;
protected DbNode next;
protected DbNode previous;
public DbNode(){}
public DbNode(int e){
this.e = e;
}
public int getE() {
return e;
}
public void setE(int e) {
this.e = e;
}
public DbNode getNext() {
return next;
}
public void setNext(DbNode next) {
this.next = next;
}
public DbNode getPrevious() {
return previous;
}
public void setPrevious(DbNode previous) {
this.previous = previous;
}
}
package lwh.linearlist.linklist;
//带头节点的双链表
public class DbLinkedList {
private DbNode head;
public DbLinkedList(){
head = new DbNode();
head.next = null;
head.previous = null;
}
//在头节点后面插入节点
public void insertHead(int num){
DbNode node = new DbNode(num);
DbNode p = head.next;
if(p != null){
node.next = p;
p.previous = node;
node.previous = head;
head.next = node;
}else{
head.next = node;
node.previous = head;
}
}
//求表长,不包括表头节点
public int length(){
int len = 0;
DbNode p = head.next;
while(p != null){
len++;
p = p.next;
}
return len;
}
//删除i处的节点
public boolean delete(int i){
if(i < 1 || i > length()){
System.out.println("Delete index wrong");
return false;
}
DbNode q = head.next;
int j = 1;
while(j < i){
q = q.next;
j++;
}
DbNode r = q.next;
DbNode p = q.previous;
if(r != null){
p.next = r;
r.previous = p;
q = null;
}else{
p.next = null;
q = null;
}
return true;
}
public void print() {
if(head.next == null){
System.out.println("No num");
return;
}
System.out.print("[");
for(DbNode node = head.next; node != null; node = node.next){
if(node.next != null)
System.out.print(node.e + ",");
else
System.out.print(node.e + "]");
}
System.out.println();
}
}
上一篇: 在真实的历史当中,三国时期的寿春之战是怎样的过程?
下一篇: 双向带头循环链表