单链表Java的实现

前言:

        最近在复习数据结构与算法的时候,之前上课的时候是使用C++来实现的,现在在学习Java就想着用Java实现一遍,因为链表的代码老实说还得自己过一遍,在搜索的时候觉得别人的代码有些关键的节点代码觉得写的不是很清晰,所以自己写一遍会更好, 然后现在分享出来也是希望能收获到反馈,因为链表的关键就是边界条件特别多。希望大家多多指教!!

正文:

        其中包括了头增加和尾增加,根据相应位置增加还有相应位置的删除。和我看到的大部分实现不同的地方在于,找到相应的位置我是用另外的函数去获取相应的节点的。需要注意的还有一点,就是我的Index是从1开始,也就是0是头节点。比如:删除节点,如果index等于1,则是删除第一个有效节点,头节点不算有效节点。

具体的代码实现:

package com.base.algorithm;


class Node {  //写public 是为了不用写set和get方法
    public int data;
    public Node next;
    public Node(int data) {
        this.data = data;
    }
}
class LinkedList1{  //和LinkedLink类重名了
    public Node head;
    public int len;
    public LinkedList1(){
        head = new Node(0);
        len = 0;
    }
    public void insertNode(int index, int data){  // 在指定位置插入一个新的节点,插入后它的index就等于该index
        if(index <= 0 || index > len){
            System.out.println("传入参数错误");
            return;
        }
        Node newNode = new Node(data);
        Node indexNode = returnIndexNode(index);
        newNode.next = indexNode.next;
        indexNode.next = newNode;
        len++;
    }
    public void addNodeHead(int data){ //头插入
        Node newNode = new Node(data);
        newNode.next = head.next;
        head.next = newNode;
        len++;
    }
    public void addNodeTail(int data){ //尾插入
        Node newNode = new Node(data);
        Node temp = head;
        while(temp.next != null){
            temp = temp.next;
        }
        temp.next = newNode;
        len++;
    }
    public Node returnIndexNode(int index){  //返回目标位置的前一个节点
        int point = 1;
        Node temp = head;
        while(temp!=null && point<index){
            temp = temp.next;
            point++;
        }
        return temp;
    }
    public void deleteNode(int index){   //传入1则删除第一个节点,头节点为0
        if(index < 1 || index > len){
            System.out.println("传入参数错误");
            return;
        }
        Node indexNode = returnIndexNode(index);
        indexNode.next = indexNode.next.next;
        len--;
    }
    public void display(){
        Node p = head.next;
        while(p != null){
            System.out.println(p.data);
            p = p.next;
        }
    }
}
public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList1 node = new LinkedList1();
        node.addNodeTail(1);
        node.addNodeTail(2);
        node.addNodeTail(3);
        node.addNodeHead(8);
        node.insertNode(2,9);
        node.display();
        System.out.println("------------");
        node.deleteNode(1);
        node.display();
    }
}

 输出的结果:

 总结:

         数据结构Java实现我也会继续更新,主要是想先放出来得到大家的反馈,然后再不断完善和修改。希望看到的大?们多多指正,得到反馈我也会立马思考并进行改正,谢谢大家??


版权声明:本文为weixin_51043896原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。