八大数据结构-数组和栈.
八大数据结构-堆和栈的区别 | 单向链表.
双向链表class doubleNode添加节点{ public T val; public doubleNode per; public doubleNode next; public doubleNode(T val, doubleNode per, doubleNode next) { this.val = val; this.per = per; this.next = next; } public doubleNode(T val) { this.val = val; } @Override public String toString() { return "doubleNode{" + "val=" + val + '}'; } }
public void addFirst(T data){
doubleNode newdoubleNode = new doubleNode(data);
if (first == null){
last = newdoubleNode;
}else {
first.per = newdoubleNode;
newdoubleNode.next = first;
}
//把新的节点作为头节点
first = newdoubleNode;
size ++;
}
public void addLast(T data){
doubleNode newdoubleNode = new doubleNode(data);
if (first == null) first = newdoubleNode;
else {
last.next = newdoubleNode;
newdoubleNode.per = last;
}
last = newdoubleNode;
size ++;
}
public void add(T data,int index){
doubleNode newdoublenode = new doubleNode(data);
if (first == null){
first = newdoublenode;
last = newdoublenode;
size ++;
return;
}
doubleNode temp = first;
if (index == size){
last.next = newdoublenode;
newdoublenode.per = last;
last = newdoublenode;
size++;
return;
}
for(int i = 0; i< index ; i++){
temp = temp.next;//找到要插入节点的前一节节点
}
temp.per.next = newdoublenode;
newdoublenode.next = temp;
temp.per = newdoublenode;
size ++;
return;
}
删除节点
public doubleNode delete(int index){
doubleNode temp = first;
if (index == 0){
//在头部删除
doubleNode tempfirst = first;
first = first.next;
first.per = null;
size--;
return tempfirst;
}
if (index == size-1){
//删除尾节点
doubleNode templast = last;
last.per.next = null;
last = last.per;
size--;
return templast;
}
for (int i =0 ; i< index; i++){
//找到要删除的节点
temp = temp.next;
}
temp.per.next = temp.next;
temp.next.per = temp.per;
return temp;
}
遍历链表
public void show() throws IllegalAccessException {
if (first == null) {
throw new IllegalAccessException("list is empty");
}
doubleNode temp = first;
while (temp!=null){
System.out.println(temp);
temp = temp.next;
}
}
全部代码
package linked; public class DoubleListlinked环形链表单项链表{ private doubleNode first; private doubleNode last; private int size; public DoubleListlinked() { this.first = null; this.last = null; size = 0; } public int getSize() { return size; } public void addFirst(T data){ doubleNode newdoubleNode = new doubleNode(data); if (first == null){ last = newdoubleNode; }else { first.per = newdoubleNode; newdoubleNode.next = first; } //把新的节点作为头节点 first = newdoubleNode; size ++; } public void addLast(T data){ doubleNode newdoubleNode = new doubleNode(data); if (first == null) first = newdoubleNode; else { last.next = newdoubleNode; newdoubleNode.per = last; } last = newdoubleNode; size ++; } public void add(T data,int index){ doubleNode newdoublenode = new doubleNode(data); if (first == null){ first = newdoublenode; last = newdoublenode; size ++; return; } doubleNode temp = first; if (index == size){ last.next = newdoublenode; newdoublenode.per = last; last = newdoublenode; size++; return; } for(int i = 0; i< index ; i++){ temp = temp.next;//找到要插入节点的前一节节点 } temp.per.next = newdoublenode; newdoublenode.next = temp; temp.per = newdoublenode; size ++; return; } public void show() throws IllegalAccessException { if (first == null) { throw new IllegalAccessException("list is empty"); } doubleNode temp = first; while (temp!=null){ System.out.println(temp); temp = temp.next; } } public doubleNode delete(int index){ doubleNode temp = first; if (index == 0){ //在头部删除 doubleNode tempfirst = first; first = first.next; first.per = null; size--; return tempfirst; } if (index == size-1){ //删除尾节点 doubleNode templast = last; last.per.next = null; last = last.per; size--; return templast; } for (int i =0 ; i< index; i++){ //找到要删除的节点 temp = temp.next; } temp.per.next = temp.next; temp.next.per = temp.per; return temp; } public static void main(String[] args) { DoubleListlinked
package linked; import java.awt.image.CropImageFilter; public class CircleSinglelinked{ private CircleNode first = null; private int size = 0; public void circle(int count){ if (count < 1 ) { System.out.println("Error"); return; } CircleNode temp = null; int number = count; for (int i =0; i< number ; i++){ CircleNode newnode = new CircleNode(i); if (i == 0){ first = newnode;//将第一个节点指向新节点 first.next = first;//将首节点指向自己形成环形 temp = first; }else { temp.next = newnode; newnode.next = first; temp = newnode; } size++; } } public int getSize() { return size; } public void show(){ int count = size; CircleNode temp = first; for (int i =0; i< size; i++){ System.out.println(temp); temp = temp.next; } } public void add(T data,int index){ if (index > size || index <0){ System.out.println("error"); return; } CircleNode temp = first; for (int i =0;i< index-1;i++){ //找到前一个节点 temp = temp.next; } CircleNode newnode = new CircleNode(data); newnode.next = temp.next.next; temp.next = newnode; size++; } public static void main(String[] args) { CircleSinglelinked circleSinglelinked = new CircleSinglelinked(); circleSinglelinked.circle(8); circleSinglelinked.show(); circleSinglelinked.add(8,8); circleSinglelinked.show(); } } class CircleNode { public T val; public CircleNode next; public CircleNode() { } public CircleNode(T val) { this.val = val; } public CircleNode(T val, CircleNode next) { this.val = val; this.next = next; } @Override public String toString() { return "CircleNode{" + "val=" + val + '}'; } } class CircleNode { public T val; public CircleNode next; public CircleNode() { } public CircleNode(T val) { this.val = val; } public CircleNode(T val, CircleNode next) { this.val = val; this.next = next; } @Override public String toString() { return "CircleNode{" + "val=" + val + '}'; } }



