链表——单链表和双链表

链表

  • 定义:在内存中并不相连,但是在逻辑上相连的一组数据。

  • 连接方式:每一个数据中都有指向下一个数据的一个指针(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;
			}
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值