链表

## 单链表

**1.定义:**

​ 由多个结点组成,每一个结点都由一个**数据域**和**指针域**组成,**数据域用来存储数据**,**指针域用来指向其后继结点**。

​ 链表的的**头结点的数据域不存数据**指针域指向第一个正真存储数据的结点。

##### 2.基本操作

根据此图容易理解:

 

 

 

代码:

```java
public class LinkList {
public static void main(String[] args) {
Node nodeA = new Node(1, "aaa", "AAA");
Node nodeB = new Node(2, "bbb", "BBB");
Node nodeC = new Node(3, "ccc", "CCC");
ListArray listArray = new ListArray();
listArray.insert(nodeA);
listArray.insert(nodeB);
listArray.insert(nodeC);
}
}


class ListArray {
// 初始化一个链表,头节点
private Node head = new Node(0, "", "");

// 得到头节点
public Node getHead() {
return head;
}

// 链表中插入元素
public void insert(Node node) {
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = node;
}

// 遍历链表中元素
public void getList() {
if (head.next == null) {
System.out.println("链表为空");
return;
}
Node temp = head;
while (temp.next != null) {
System.out.println(temp.next);
temp = temp.next;
}
}

/**
* 在指定位置插入元素
*
* @param node
*/
public void add(Node node) {
Node temp = head;
// for (int i=0; i<=index-1; i++) {
// temp =temp.next;
// }
// node.next = temp.next;
// temp.next = node;
boolean flag = false;
while (true) {
if (temp.next == null) { // 到尾了,直接插入
break;
} else if (temp.next.no > node.no) {
break;
} else if (temp.next.no == node.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
System.out.println("节点已存在");
} else {
node.next = temp.next;
temp.next = node;
}
}

/**
* 修改链表
*
* @param node
*/
public void update(Node node) {
if (head.next == null) {
System.out.println("链表为空");
}
Node temp = head.next;

while (temp.no != node.no) {
if (temp == null) {
System.out.println("未找到元素");
return;
}
temp = temp.next;
}
temp.bName = node.bName;
temp.name = node.name;
}

/**
* 删除链表
*/

public void delete(Node node) {
Node temp = head;

while (temp.next != node) {
if (temp.next == null) {
System.out.println("未找到");
return;
}
temp = temp.next;
}
Node nextNode = temp.next;
temp.next = nextNode.next;
}

}


/**
* 创建节点Node
*/
class Node {
public int no;
public String name;
public String bName;
public Node next;

public Node(int no, String name, String bName) {
this.no = no;
this.name = name;
this.bName = bName;
}

@Override
public String toString() {
return "Node{" +
"no=" + no +
", name='" + name + '\'' +
", bName='" + bName + '\'' +
'}';
}
}
```

 

posted @ 2020-03-24 18:00  撑起一片阳光  阅读(161)  评论(0编辑  收藏  举报