class ListNode{
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 display(){
ListNode cur=head;
while(cur!=null){
System.out.print(cur.val+" ");
cur=cur.next;
}
System.out.println();
}
//得到单链表的长度
public int size(){
ListNode cur=head;
int count=0;
while(cur!=null){
count++;
cur=cur.next;
}
return count;
}
//查找是否包含关键字key是否包含在单链表中
public boolean contains(int key){
ListNode cur=head;
while(cur!=null){
if(cur.val==key){
return true;
}
cur=cur.next;
}
return false;
}
//头插法
public void addFirst(int data){
ListNode node=new ListNode(data);
if(head==null){
head=node;
last=node;
}else {
node.next = head;
head.prev = node;
head = node;
}
}
//尾插法
public void addLast(int data){
ListNode node=new ListNode(data);
if(head==null){
head=node;
last=node;
}else {
last.next = node;
node.prev = last;
last = node;
}
}
//删除第一次出现关键字为key的节点
public void remove(int key){
if(head==null){
return;
}
ListNode cur=head;
while(cur!=null){
if(cur.val==key){
if(cur==head){
head=head.next;
if(head!=null) {
head.prev = null;
}else{
last=null;
}
}else{
cur.prev.next=cur.next;
if(cur==last){
last=last.prev;
}else {
cur.next.prev = cur.prev;
}
}
return;
}else{
cur=cur.next;
}
}
}
public void removeAllKey(int key){
if(head==null){
return;
}
ListNode cur=head;
while(cur!=null){
if(cur.val==key){
if(cur==head){
head=head.next;
if(head!=null) {
head.prev = null;
}else{
last=null;
}
}else{
cur.prev.next=cur.next;
if(cur==last){
last=last.prev;
}else {
cur.next.prev = cur.prev;
}
}
}
cur=cur.next;
}0
}
//在任意位置插入 第一个数据节点为0号下标
public ListNode searchIndex(int index){
ListNode cur=this.head;
while(index!=0){
cur=cur.next;
index--;
}
return cur;
}
public void addIndex(int index,int data){
ListNode node=new ListNode(data);
if(index<0||index>size()){
System.out.println("index位置不合法");
return ;
}
if(index==0){
addFirst(data);
return;
}
if(index==size()){
addLast(data);
return;
}
ListNode cur=searchIndex(index);
node.next=cur;
cur.prev.next=node;
node.prev=cur.prev;
cur.prev=node;
}
public void clear(){
while(head!=null){
ListNode headNext=head.next;
head.prev=null;
head.next=null;
head=headNext;
}
last=null;
}
}
Java实现双向链表~
最新推荐文章于 2024-09-10 10:22:48 发布