关于链表 java

参考自:https://www.cnblogs.com/whgk/p/6589920.html 

链表、头指针、头结点(经典)   参考自:https://blog.csdn.net/foreverhuylee/article/details/38780051  

有时在单链表的第一个结点之前附设一个结点,称之为头结点  头结点的数据域可以不存储任何信息,也可以存储如线性表长度等类的附加信息,头结点的指针域存储指向第一个结点的指针(即第一个元素结点的存储位置)。如图2(a)所示,此时,单链表的头指针指向头结点。若线性表为空,则头结点的指针域为“空”,如图所示。

头指针、头结点、第一个结点的区别与联系?

(1)头指针明显是一个指针,指向头结点

头节点的next指针指向第一个节点

第一个节点是一个节点,data变量存放第一个数据,next指针变量指向第二个节点

 

(2)头指针是指向头结点的指针

头结点是出于第一个结点之前的空结点

第一个结点就是出于第一个的结点(除头结点外)

 

(3)一个链表中,可以没有头结点,但是一定有头指针,头指针是对单链表的标识,

如果没有头结点,则头指针指向第一个结点

 

1单链表的定义

1.1 编写一个Node类来充当结点的模型。我们知道,其中有两个属性,1存放数据的data,2存放下一结点的引用,

//Definition for singly-linked list.
 public class ListNode {
    int val;//存放数据的变量

      ListNode next;//存放节点的变量(类似指针),默认为null

      ListNode(int x) { val = x; }//构造方法,在构造时能够给data赋值
 }

1.2 计算链表的长度 

 /**
     *计算链表的长度,也就是有多少个节点
     *return 节点个数
     **/
    public int length(){
        int length  = 0;
        Node length = head;
        while (temp.next!=null){
            length++;
            temp=temp.next;
        }
        return length;
    }

 1.3 增加结点操作,addNode(Node)

/**
     * 增加操作
     *         直接在链表的最后插入新增的结点即可
     *         将原本最后一个结点的next指向新结点
     */
    public void addNode(Node node){
        //链表中有结点,遍历到最后一个结点
        Node temp = head;    //一个移动的指针(把头结点看做一个指向结点的指针)
        while(temp.next != null){    //遍历单链表,直到遍历到最后一个则跳出循环。
            temp = temp.next;        //往后移一个结点,指向下一个结点。
        }
        temp.next = node;    //temp为最后一个结点或者是头结点,将其next指向新结点
    }

1.4 遍历链表,打印所有data

/* 遍历链表,打印所有data*/
   public void print(){
       Node temp= head.next;
       while (temp!=null){
           System.out.print(temp.data+",");
           temp=temp.next;
       }
       System.out.println();
   }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值