数据结构之链表
单链表
单链表
单向链表是最简单、最基础的链表,它的一个结点(node)分两部分,第一部分存储结点的数据信息(data),第二部分存储指向下一结点的地址(next)信息。
代码实现
代码如下(示例):
package com.linkedlist;
public class SingleLinkedList {
//初始化一个头节点
private Node head;
//链表计数器
int count = 0;
/**
* 头插
*/
public void addHeader(int elem){
Node temp = new Node(elem); //初始化
if (head == null){
head = temp;
return;
}
temp.next = head;
head = temp;
count++;
}
/**
* 尾插
*/
public void addTail(int elem){
//初始化节点
Node temp = new Node(elem);
if (head == null){
head = temp;
return;
}
Node cur = this.head;
while (cur.next != null){
cur = cur.next;
}
cur.next = temp;
temp.next = null;
}
/**
* 遍历
*/
public void display(){
System.out.print("[");
for (Node node = this.head; node != null; node = node.next){
System.out.print(node.getData());
if (node.next != null){
System.out.print(",");
}
}
System.out.println("]");
}
/**
* 链表的大小
* @return
*/
public int size(){
Node node = head;
int size = 0;
while (node != null){
node = node.next;
size++;
}
return size;
}
public Node getIndex(int index){
Node node = head;
for (int i = 0; i < index; i++){
node = node.next;
}
return node;
}
/**
* 往指定位置插入数据
* 要找到前一个节点的位置
* @param index
* @param elem
*/
public void addIndex(int index,int elem){
//创建节点
Node node = new Node(elem);
//获取链表长度
int len = size();
if (index < 0 || index > len){
return;
}
if (index == 0){
addHeader(elem);
}
if (index == len){
addTail(elem);
}
Node pre = getIndex(index - 1); //找到上一个节点
node.next = pre.next;
pre.next = node;
}
/**
* 找到带删除节点的前一个节点
* @param removeData
* @return
*/
public Node searchPrev(int removeData){
if (head == null){
return null;
}
Node prev = this.head;
while (prev.next != null){
if (prev.next.getData() == removeData){
return prev;
}
prev = prev.next;
}
return null;
}
/**
* 删除节点
*/
public void remove(int removeData){
if (head == null){
return;
}
//要删除的节点是否为头节点
if (head.getData() == removeData){
this.head = this.head.next;
return;
}
//删除中间节点
Node prev = searchPrev(removeData);
prev.next = prev.next.next;
}
}
class Node{
private int data;
public Node next;
public Node(int data) {
this.data = data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}