数据结构学习(一)单链表

转行不易,没有系统的学习数据结构,缺乏认知,现在开始从零学起。

总的来说,就是每个节点包含当前节点的值,并指向下一个节点,彼此关联。笔者java出身,从java的角度说,像是多层对象的递归赋值,因此,基于此逻辑,实现我们的单链表构造和基本的头尾插入、指定位置插入、指定位置删除。

废话不多说,直接亮代码:

package singlelinkedList;

/**
 * Message: 单链表实现
 * <p>
 * Content: 包含链表构造,头尾插入,指定位置插入,指定位置删除
 *
 * @author lucky
 * create on 2018/07/31
 */
public class Node {
    public int data;
    public Node next;
    public Node(){}
    public Node(int value){
        this.data = value;
    }

    /**
     * 递归打印链表
     * @param node
     */
    public static void ScanNode(Node node){
        if (node.next != null){
            System.out.println(node.data);
            ScanNode(node.next);
        }else {
            System.out.println(node.data);
        }
    }

    /**
     * 尾插入
     * 增加一个node,遍历需要插入的node的所有节点,
     * 找出下一个节点为空的,默认为尾节点,插入新值
     *
     * @return
     */
    public static Node addNode(Node source,Node newNode){
        Node temp = source;
        while (temp.next != null)
        {
            temp = temp.next;
        }


        temp.next = newNode;

        return source;

    }

//    /**
//     * 头插入
//     * 直接将新节点的下一节点指向已定义的节点即可
//     *
//     * @return
//     */
//    public static Node addNode(Node source,Node newNode){
//
//        newNode.next = source;
//
//        return newNode;
//
//    }



    /**
     * 插入节点到指定位置,需要将其余位置的节点后移
     *
     * @param
     */
    public static Node insertNodeByIndex(Node source,int index,Node newNode){

        Node temp = source;
        int i = 0;
        while (i < index){
            if(temp.next == null)
            {
                temp.next = newNode;
                return temp;
            }
            else {
                temp = temp.next;
                i++;
            }
        }

        newNode.next = temp.next;

        temp.next = newNode;

        return temp;
    }
    
    public static Node delNodeByIndex(Node source,int index){

        Node temp = source;

        int i = 0;
        while (i < index){
            if(temp.next == null)
            {
                return temp;
            }
            else {
                temp = temp.next;
                i++;
            }
        }

        temp.next = temp.next.next;

        return temp;
    }

    public static void main(String[] args){
        int[] arrays = {2,3,4,5,7,6,1};
        Node node = null;
        for (int i = 0; i < arrays.length;i++) {
            if(i==0){
                node = new Node(arrays[i]);
            }
            else {
                Node newNode = new Node(arrays[i]);
                node = addNode(node,newNode);
            }
        }

        ScanNode(node);

        System.out.println("===========下一个开始=============");

        insertNodeByIndex(node,3,new Node(11));

        ScanNode(node);

        System.out.println("===========下一个开始=============");

        delNodeByIndex(node,3);

        ScanNode(node);
    }

}

  

一套思考加实现,一个小时就过去了,后面将尝试几个与单链表相关的算法实现,敬请关注~

每天一小时,进步一丢丢!

猜你喜欢

转载自www.cnblogs.com/mowenlucky/p/9398253.html