链表
-
定义:在内存中并不相连,但是在逻辑上相连的一组数据。
-
连接方式:每一个数据中都有指向下一个数据的一个指针(next,pre)。
单链表
定义:每一个数据中只有指向下一个元素的指针。
-链表的建立:
//建立链表中的元素
class HeroNode {
public int no;//数据是通过no来定位的
public String name;
public String nickname;
public HeroNode next; // next 默认为null
public HeroNode(int hNo, String hName, String hNickname) {
no = hNo;
name = hName;
nickname = hNickname;
}
}
//建立链表
public class Single_Liked{
HeroNode head=new HeroNode(0,"","");
}
添加数据
public void add(HeroNoder heronoder){
//temp为指针
HeroNoder temp=head;
//temp移动到链表尾部
while(true){
if(temp.next==null){
break;
}
//temp向下移动一个
temp=temp.next;
}
//在尾部添加
temp.next=heronder;
}
//按照顺序添加
public void addbyorder(HeroNoder heronoder){
HeroNoder temp=head;
while(true){
if(temp.next.no>heronoder.no){
break;
}
temp=temp.next;
}
temp.next=heronoder;
}
删除数据
public void delete(){
HeroNoder temp=head;
//删除最后的元素
while(true){
if(head.next==null){
System.out.println("链表为空");
break;
}\
//只有一个元素
if(head.next.next==null){
head.next=head.next.next;
}
if(temp.next.next==null){
break;
}
temp=temp.next;
}
temp.next=null;
}
public void deletebyorder(HeroNoder heronoder){
//假设链表之中没有这个元素
boolen flag=false;
HeroNoder temp=head;
while(true){
if(temp.next==heronoder){
flag=true;
break;
}
temp.=temp.next;
}
if(flag){
temp.next=temp.next.next;
}else{
System.out.println("链表这个元素");
}
}
遍历数据
public void list(){
if(head.next==null){
System.out.println("链表为空");
}
Heronoder heronoder=head;
while(true){
if(temp.next!=null){
System.out.println("......()............");
}
temp=temp.next;
}
}
双向链表
建立
//建立链表中的元素
class HeroNode {
public int no;//数据是通过no来定位的
public String name;
public String nickname;
public HeroNode next; // next 默认为null
public HeroNoder pre;
public HeroNode(int hNo, String hName, String hNickname) {
no = hNo;
name = hName;
nickname = hNickname;
}
}
//建立链表
public class Double_Liked{
HeroNode head=new HeroNode(0,"","");
}
自我删除(一进一出)
public void delete(HeroNoder heronoder){
HeroNoder temp=head;
while(true){
temp=temp.next;
if(temp.no=heronoder.no){
//将pre.next想象成两个慢动作就好理解了
temp.pre.next=temp.next;
}
}
}