## Java数据结构（三）：线性表之单链表 转

凌枫yong

``````本例中实现的链表结构都是带头结点的。具体代码如下：
``````
``````package datastructure.linear.linked;

import datastructure.exception.StructureException;
import datastructure.linear.AbstractList;

/** * @Description 单链表 * @author mastery * @Date 2015年6月30日下午6:11:17 * @param <T> */
public class SingleLinkedList<T> extends AbstractList<T> {

class Node<T1> {

T1 element;

Node<T1> next;

public Node(Node<T1> next) {
super();
this.next = next;
}

public Node(T1 element, Node<T1> next) {
super();
this.element = element;
this.next = next;
}

@Override
public String toString() {
return element.toString();
}
}

/** * 头结点,该结点没有参数值，只是指向第一个元素的结点 */

/** * 当前的结点 */
private Node<T> currentNode;

head = currentNode = new Node<T>(null);
size = 0;
}

/** * 得到当前下标对应的结点 * @param index * @throws StructureException */
public void indexNodeToCurrent(int index) throws StructureException {
if(index < -1 || index > size -1) {
throw new StructureException("index参数异常！");
}
if(index == -1) {
return ;
}
int j = 0 ;
while(currentNode != null && j < index) {
currentNode = currentNode.next;
j++;
}
}

@Override
public void insert(int index, T t) throws StructureException {
if(index < 0 || index > size) {
throw new StructureException("index参数异常！");
}
// 得到当前下标的上一个结点
indexNodeToCurrent(index-1);
// 将新元素生成结点插入到当前结点下
currentNode.next = new Node<T>(t , currentNode.next);
size++;
}

@Override
public void delete(int index) throws StructureException {
if(isEmpty()) {
throw new StructureException("链表为空");
}
if(index < 0 || index > size) {
throw new StructureException("index参数异常");
}
indexNodeToCurrent(index-1);
Node<T> twoNextNode = currentNode.next.next;
currentNode.next = twoNextNode;
size--;
}

@Override
public T get(int index) throws StructureException {
if(isEmpty()) {
throw new StructureException("链表为空");
}
if(index < 0 || index > size) {
throw new StructureException("index参数异常！");
}
indexNodeToCurrent(index);
return currentNode.element;
}

}
``````

``````package datastructure.linear.linked;

import static org.junit.Assert.*;

import org.junit.Test;

import datastructure.exception.StructureException;
import datastructure.linear.List;

public class SingleLinkedListTest {

@Test
public void testSingleLinkedList() throws StructureException {
List<Integer> list = new SingleLinkedList<Integer>();
for(int i = 0 ; i < 10 ; i ++) {
list.insert(i, i+1);
}
list.delete(0);
for(int i = 0 ; i < list.size() ; i++) {
System.out.print(list.get(i) + " ");
}
}

@Test
public void testIndexNodeToCurrent() {
fail("尚未实现");
}

@Test
public void testInsert() {
fail("尚未实现");
}

@Test
public void testDelete() {
fail("尚未实现");
}

@Test
public void testGet() {
fail("尚未实现");
}

}
``````

### 凌枫yong

《数据结构与算法系列》合集整理

《数据结构与算法系列》合集整理 整理来自博客园skywang12345，以下摘自作者介绍： “最近抽空整理了"数据结构和算法"的相关文章。在整理过程中，对于每种数据结构和算法分别给出"C"、"C++"...

kaixin_code
2018/12/01
0
0

2018/08/06
0
0

Stars-one
2018/07/29
0
0
[LintCode] Linked List Cycle（带环链表）

honeymose
2018/12/16
0
0

AI科技大本营
2018/09/27
0
0

table边框样式

table{ border:0.5px solid #000; border-collapse:collapse; //去除边框间空隙}th,td{ border:0.5px solid #000;}...

16分钟前
1
0

21分钟前
0
0
Vue Element表单绑定（四）常用操作整理

tianma3798
26分钟前
1
0
《大话数据结构》读后总结（七）

27分钟前
0
0
three.js 事件交互

tianyawhl
28分钟前
1
0