加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
MyRealLinkedList.java 4.63 KB
一键复制 编辑 原始数据 按行查看 历史
鸢也12123 提交于 2021-09-27 14:52 . 链表
import java.security.PublicKey;
class ListNode{
public int data;
public ListNode prev;
public ListNode next;
public ListNode(int data) {
this.data=data;
}
}
public class MyRealLinkedList {
public ListNode head;//头
public ListNode last;//尾
//头插法
public void addFirst(int data) {
ListNode node=new ListNode(data);
if(this.head==null) {
this.head=node;
}else {
node.next=this.head;
this.head.prev=node;
this.head=node;
}
}
//尾插法
public void addLast(int data) {
ListNode node=new ListNode(data);
if(head==null) {
this.head=node;
this.last=node;
}else {
last.next=node;
node.prev=last;
last=node;
}
}
public ListNode findIndx(int index) {
ListNode cur=this.head;
while(index!=0) {
cur=cur.next;
index--;
}
return cur;
}
//任意位置插入,第一个数据节点为0号下标
public void addIndex(int index,int data) {
if(index < 0 || index > size()) {
System.out.println("不合法");
return;
}
if(index == 0) {
addFirst(head.data);
return;
}
if(index == size()) {
addLast(last.data);
return;
}
ListNode node=new ListNode(data);
ListNode cur=findIndx(index);
node.next=cur;
cur.prev.next=node;
node.prev=cur.prev;
cur.prev=node;
/**
* node.next=cur;
* cur.prev=node.prev;
* cur.prev.next=node;
* cur.prev=node;
*/
}
//查找是否包含关键字key是否在单链表当中
public boolean contains(int key) {
ListNode cur=this.head;
while(cur!=null) {
if(cur.data==key) {
return true;
}
cur=cur.next;
}
return false;
}
//删除第一次出现关键字为key的节点
public void remove(int key) {
ListNode cur=this.head;
while(cur!=null) {
if(cur.data==key) {
//头结点的时候
if(cur==this.head) {
this.head=this.head.next;
//防止只有一个节点
if(this.head==null) {
this.last=null;
}else {
this.head.prev=null;
}
}else {
cur.prev.next=cur.next;
//尾巴的时候
if(cur.next==null) {
this.last=cur.prev;
}else {
cur.next.prev=cur.prev;
}
}
return;
}else {
cur=cur.next;
}
}
}
//删除所有值为key的节点
public void removeAllKey(int key) {
ListNode cur=this.head;
while(cur!=null) {
if(cur.data==key) {
//头结点的时候
if(cur==this.head) {
this.head=this.head.next;
//防止只有一个节点
if(this.head==null) {
this.last=null;
}else {
this.head.prev=null;
}
}else {
cur.prev.next=cur.next;
//尾巴的时候
if(cur.next==null) {
this.last=cur.prev;
}else {
cur.next.prev=cur.prev;
}
}
cur=cur.next;
}else {
cur=cur.next;
}
}
}
//得到单链表的长度
public int size() {
if(this.head==null) {
return -1;
}
ListNode cur=this.head;
int count=0;
while (cur!=null) {
cur=cur.next;
count++;
}
return count;
}
//打印双向链表
public void display() {
ListNode cur=this.head;
while(cur!=null) {
System.out.print(cur.data+" ");
cur=cur.next;
}
System.out.println();
}
public void clear() {
ListNode cur=this.head;
while(cur!=null) {
ListNode curNext=cur.next;
cur.prev=null;
cur.next=null;
cur=curNext;
}
this.head=null;
this.last=null;
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化