赞
踩
无头双向链表:在Java的集合框架库中LinkedList底层实现就是无头双向循环链表
总结:
单向链表在删除一个节点的时候,需要借助前驱节点,才能删除。
双向链表删除节点,不需要借助前驱节点
因为双向链表,它存储前驱和后驱的节点的地址,它都知道。
另外双向链表会多一个引用last,这个引用永远指向此时链表的尾巴节点
head就是永远指向双向链表的头节点。
class ListNode{
//存储int类型的数据
public int val;
//存储上一个节点的地址
public ListNode prev;
//存储下一个节点的地址
public ListNode next;
public ListNode(int val){
//构造方法
this.val = val;
}
}
public class MyLinkedList { //指向双向链表的头结点 public ListNode head; //指向双向链表的尾巴节点 public ListNode last; //头插法 public void addFirst(int data){ }; //尾插法 public void addLast(int data){ }; //任意位置插入,第一个数据节点为0号下标 public boolean addIndex(int index,int data){ return true; }; //查找是否包含关键字key是否在单链表当中 public boolean contains(int key){ return true; }; //删除第一次出现关键字为key的节点 public void remove(int key){ }; //删除所有值为key的节点 public void removeAllKey(int key){ }; //得到单链表的长度 public int size(){ return 0; }; public void display(){ }; public void clear(){ }; }
实现LinkedList中的所有方法
通过这些方法就可以操作链表
//打印链表
public void display(){
ListNode cur = this.head;
while(cur != null){
System.out.print(cur.val + " ");
cur = cur.next;
}
System.out.println();
};
//得到链表的长度
public int size(){
ListNode cur = this.head;
int count = 0;
while(cur != null){
count++;
cur = cur.next;
}
return count;
};
//查找是否包含关键字key是否在单链表当中
//找到返回true,找不到返回false
public boolean contains(int key){
ListNode cur = this.head;
while (cur != null){
if(cur.val == key){
return true;
}
cur = cur.next;
}
return false;
};
//头插法
public void addFirst(int data){
ListNode node = new<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。