(第5讲)单链表(带头结点和不带头结点)

最近在看数据结构,刚开始看链表的时候,很迷糊,什么头结点,头指针,首结点的傻傻分不清楚,现在明白啦:

1、只要是链表都有头指针,暂时用head表示;链表中的第一个结点称为首结点,最后一个结点称为尾结点

2、头结点的存在是为了方便操作,针对单链表来说,如果带头结点的话,头指针指向头结点,头结点指向首结点;如果不带头结点的话,头指针指向首结点,如果进行插入和删除操作,必须要注意是否是在链表头进行,要分情况处理,而带头结点的不用分情况,比较方便。

下边是我写的头结点和不带头结点的单链表程序:都是验证过的,对的

/**
 * 无头结点的单链表:当在首结点前插入或者删除首结点的时候需要改变头指针head
 */
package com.two;


import java.util.Scanner;


public class NoLinkList{
private Node head;//头指针
public NoLinkList(){
head = null;
}
//利用头插法或者尾插法插入数据,注意:当插入数据类型不是int的时候,需要修改一下
public NoLinkList(int length,boolean headORrear) throws Exception{
this();
if(headORrear){
insertHead(length);//头插法
}else{
insertRear(length);//尾插法
}
}
//利用头插法创建长度为length的单链表
public void insertHead(int length) throws Exception{
Scanner sc = new Scanner(System.in);
for(int i=0;i<length;i++)
{
insert(0,sc.nextInt());
}
}
//利用尾插法创建长度为length的单链表
public void insertRear(int length)throws Exception{
Scanner sc = new Scanner(System.in);
for(int i=0;i<length;i++)
{
insert(length(),sc.nextInt());
}
}
//增:在指定位置上添加结点
public void insert(int index,Object value)throws Exception{
Node node = head ;
int j =0;
//while(node.next!=null && j<index-1){错的
while(node !=null && j<index-1){
node = node.next;
++j;
}
//if(j>index || node==null){
if(index<0 || index>length()){
System.out.println("插入位置不合法");
}
Node newNode = new Node(value);
if(index==0){
//newNode.next = head.next;报错
newNode.next = head;
head = newNode;
}else{
newNode.next = node.next;
node.next = newNode;
}
}
//根据下标删除指定结点
public void delete(int index)throws Exception{
Node node = head;
int j = 0;
while(node!=null && j<index-1){
//while(node.next!=null && j<index-1){
node = node.next;
++j;
}
//if(j>index-1 || node.next==null){
if(index<0 || index>=length()){
throw new Exception("删除位置不合法");
}
if(index==0){
head = head.next;
}else{
node.next = node.next.next;
}

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值