链表操作Java实现

Posted 卑微芒果

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表操作Java实现相关的知识,希望对你有一定的参考价值。

单链表

1、头插法建表

static ListNode creatFromHead() {
        ListNode head = new ListNode(-1);
        for(int i = 1; i < 5;i++) {
            ListNode p = new ListNode(i);
            p.next = head.next;
            head.next = p;
        }
        return head;
    }

2、尾插法建表

static ListNode creatFromTail() {
        ListNode head = new ListNode(-1);
        ListNode next = head;
        for(int i = 1; i < 5; i++) {
            ListNode p = new ListNode(i);
            next.next = p;
            next = p;
        }
        return head;
    }

 3、查找第i个节点

static boolean find(ListNode l, int i) {
        if(l != null) {
            System.out.println("nullpointer");
        }
        if(l.next == null || i <=0) { return false; }
        ListNode p = l.next;
        int j = 1;//统计第几个节点
        while((p.next != null) && (j<i)) {
            p = p.next;
            j++;
        }
        if(i == j) {
            return true;
        }
        return false;
    }

 4、按值查找

static boolean findValue(ListNode l, int i) {
        if(l != null) {
            System.out.println("nullpointer");
        }
        if(l.next == null) { return false; }
        ListNode p = l.next;
        while(p != null) {
            if(p.i == i) { return true; }
            p = p.next;
        }
        return false;
    }

 5、计算链表长度

static int length(ListNode l) {
        if(l != null) {
            System.out.println("nullpointer");
        }
        int count = 0;
        if(l.next == null) { return 0; }
        ListNode p = l.next;
        while(p != null) {
            count++;
            p = p.next;
        }
        return count;
    }

 6、插入元素

static boolean add(ListNode l, int i, ListNode element) {
        if(l != null && element != null) {
            System.out.println("nullpointer");
        }
        //判断输入i
        //if(i ) {}
        ListNode p = l;
        int j = 0;
        while(p.next != null && j < i-1) {
            p = p.next;
            j++;
        }
        if(j == (i-1)) {
            element.next = p.next;
            p.next = element;
            return true;
        }
        return false;
    }

 7、打印链表

static void printLinkList(ListNode head) {
        if(head != null) {
            System.out.println("nullpointer");
        }
        head = head.next;
        while(head != null) {
            ListNode next = head.next;
            System.out.print(head + " ");
            head = next;
        }
        System.out.println();
    }

 

链表的删除操作就不说了,和上面的操作差不多,先找第i-1各元素,然后改指针就OK,比较简单。

循环链表,在表的首尾进行操作比较合适。

双向链表,寻找前驱节点比较合适。

操作方式都差不多,还是要把最基本的单链表搞会,其他的变化一下就好。

 

以上是关于链表操作Java实现的主要内容,如果未能解决你的问题,请参考以下文章

数据结构 ---[链表 ] [使用链表实现栈 以及 队列 (Java代码实现)]

Java实现双向链表的基本操作

链表常见的题型(java实现)

链表的java实现(单向双向链表,单向链表的反转)

链表的java实现(单向双向链表,单向链表的反转)

817. Linked List Components - LeetCode