单向链表

单向链表

由于单向链表的head节点不能找到前一个节点,对于添加和删除节点时候对于首部的操作会不一样,因此将head节点改为dummyHead,一个虚拟的头结点。便于进行操作的统一。

链表的成员变量及初始化

class LinkedList<E> {

    private Node dummyHead;//链表虚拟头节点
    private int size;//节点个数
    //内部类
    private class Node{
        public E e;
        public  Node next;//引用
        public Node(E e,Node next){
            this.e = e;
            this.next = next; } public Node(E e){ this.e=e; this.next=null; } public Node(){ this.e=null; this.next=null; } } public LinkedList(){ dummyHead=new Node(null,null); size=0; } }

查找:

获取链表节点个数

public int getSize(){

    return size;
}
是否为空
public boolean isEmpty(){
return size ==0;
}
是否有某元素
public boolean contains(E e){
Node current = dummyHead.next;
while (current!=null){
if(current.e.equals(e)){
return true;
}
current=current.next;
}
return false;
}
获得index位置的元素
public E get(int index){
if(index<0||index>size){
throw new IllegalArgumentException("参数不合法");
}
Node current = dummyHead.next;
for (int i=0;i<index;i++){
current = current.next;
}
return current.e;
}
获得链表头元素
public E getFirst(int index){
return get(0);
}
获得链表尾部元素
public E getLast(int index0){
return get(size-1);
}
toString()方法
public String toString(){
StringBuffer sb = new StringBuffer();
Node current = dummyHead.next;
while (current!=null){
sb.append(current.e+"->");
current=current.next;
}
sb.append("null");
return sb.toString();
}

修改:

修改index位置元素
public void set(int index,E e){
if(index<0||index>size){
throw new IllegalArgumentException("参数不合法");
}
Node current = dummyHead.next;
for(int i=0;i<index;i++){
current=current.next;
}
current.e=e;
}添加:
在链表的index的位置添加元素  
关键:找到要添加的位置的前一个节点pre,然后要添加的节点node.next指向pre.next,pre.next指向node.
public void add(int index,E e){
if(index<0||index>size){
throw new IllegalArgumentException("参数不合法");
}
Node pre = dummyHead;
for(int i=0;i<index;i++){
pre = pre.next;
}
/*Node node=new Node(e);
node.next = pre.next;
pre.next=node;*/
pre.next=new Node(e,pre.next);
size++;

}
链表头添加元素
public void addFirst(E e){
add(0,e);
}
在链表末尾添加
public void addLast(E e ){
add(size,e);
}

删除:

删除index位置元素
public E remove(int index){
if(index<0||index>size){
throw new IllegalArgumentException("参数不合法");
}
Node pre = dummyHead;
for(int i=0;i<index;i++){
pre = pre.next;
}
Node delNode = pre.next;
pre.next = delNode.next;
delNode.next=null;
size--;
return delNode.e;

}
删除首部
public E removeFirst(){
return remove(0);
}
删除尾部
public E removeLast(){
return remove(size-1);
}

gitHub源码:单向链表

转载于:https://www.cnblogs.com/fabaogege/p/10114418.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值