文章目录

  • 1.概念
  • 2.实现
  • 1.单链表
  • 1.定义节点
  • 2.构造链表及其基本功能
  • 3.几个题



1.概念

java 连表count java中链表的使用_数据结构


链表是Java中非直接支持的一种数据结构,是我们自己定义出来的。链表定义出结点,每个结点含有一个数据和一个指向下一个结点的地址,因此我们可以从头结点开始一个一个向下找到结点的位置和其中的数据。

使用链表主要是因为链表不占用整段的连续的储存空间(链式储存结构),是动态的不需要提前分配空间(数据结构:线性结构和非线性结构的理解),比如数组就是分配一整段连续的空间,但是如果空间不够没有整段的空间,但是有不连续的小的空间的话我们就可以使用链表。

链表插入时的时间复杂度只有O(1)(插入到头部或尾部),但查找时时间复杂度为O(n)(从头结点开始一个一个向后遍历);线性表和顺序表插入时时间复杂度为O(n)(插入位置后的位置都要向后挪一位),查找的时间复杂度为O(1)。


2.实现

1.单链表

1.定义节点

包含数值域和指针域,指针域中要添加下个节点的引用。

//LeetCode中的简单的定义单链表
 //Definition for singly-linked list.
 public class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 }
//加上封装后的
public class Node {
    private Object data;
    private Node next;
    private Node befor;

    public Node() {

    }
    public Node(Object data) {
        super();
        this.data = data;
    }
    public Node getBefor() {
        return befor;
    }
    public void setBefor(Node befor) {
        this.befor = befor;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }
    public Node getNext() {
        return next;
    }
    public void setNext(Node next) {
        this.next = next;
    }
}

2.构造链表及其基本功能

java 连表count java中链表的使用_java_02


基本功能主要有添加,删除,修改,遍历。

(1)添加:有直接添加到末尾,和找到相应的位置进行添加。

(2)修改:找到指定位置或者找到节点中对应的值后进行修改。

(3)遍历:遍历链表打印即可。

public void addNode(Node newNode) {
		if (this.next == null) { // 如果只有一个节点
			this.next = newNode; // 保存新节点
		} else { // 当前节点后面还有节点
			// 当前节点的下一个节点继续保存
			this.next.addNode(newNode);
 
		}
	}
  public void add (String data){
	  //为了设置数据的先后关系,所以将data包装在一个Node类对象
	  Node newNode = new Node(data);
	  if(this.root == null ){  //一个链表只有一个根节点
		  this.root = newNode;  //将新的节点设置为根节点
	  }else{  
		  //从root节点后找到合适的位置
		  this.root.addNode(newNode);
	  }
  }



public void printNode() {
		System.out.println(this.data);// 输出当前数据
		if (this.next != null) {// 如果还有下一个节点
			this.next.printNode();// 输出下一节点
		}
	}
 public void print(){
	  if( this.root != null ){
		  this.root.printNode();
	  }
  }

3.几个题

LeetCode 24.Swap Nodes in Pairs(两两交换链表中的节点) Linked List/Medium

LeetCode 147.Insertion Sort List(插入排序链表) Linked List/Medium

LeetCode 83.Remove Duplicates from Sorted List(从已排序链表中除去重复) Easy/Linked List