是对概念不清楚,还是需要代码例子?我这有个java模拟链表操作例子,题主可以放到自己开发工具中运行测试:
//链表类
public class Link {
//节点类
class Node {
//数据域
private String name;
//链域 (自引用 保存下一个节点)
private Node next;
//前趋
private Node prior;
public Node(){}//空的构造函数
public Node(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Node getPrior() {
return prior;
}
public void setPrior(Node prior) {
this.prior = prior;
}
}
Node head;// 头节点
public Link() { // 初始化头结点
head = new Node();
}
/**
* 添加节点(往链表后面添加节点)
*
* @param name
*/
public void addNode(String name) {
Node curr = head;// 把头结点赋给当前节点
Node newNode = new Node(name);// 构造新节点
while (true) {
if (curr.getNext() == null) {
curr.setNext(newNode);// 给当前节点设置下一个节点为新节点
newNode.setPrior(curr);//新的节点的前趋设置为当前节点
break;
}
curr = curr.getNext();// 把下一个节点赋给当前节点继续循环
}
}
/**
* 根据位置插入节点 3 F
*/
public void insertNode(int i, String name) {
Node curr = head;
Node newNode = new Node(name);
Node temp = null;
for (int j = 0; j < i; j++) {
temp = curr; // 第二个节点
curr = curr.getNext();// 循环3次过后curr就是第三个节点
}
// 第二个节点指向新节点
temp.setNext(newNode);
// 新节点的下一个指向第3个节点
newNode.setNext(curr);
}
/**
* 根据位置删除 3
*/
public void delById(int i) {
Node curr = head;
for (int j = 0; j < i - 1; j++) {
curr = curr.getNext();
}
curr.setNext(curr.getNext().getNext());// 把第二个节点的下一个设置为第二个节点的下下个
}
/**
* 根据位置查找内容
*/
public void selbyid(int i) {
Node curr = head;
for (int j = 0; j < i; j++) {
curr = curr.getNext();
}
System.out.println("你要查找的第" + i + "个节点的内容是" + curr.getName()+" 它的上一个节点是 "+curr.getPrior().getName());
}
/**
* 根据内容查找位置
*/
public void selname(String name) {
Node curr = head.getNext();
int i = 1;
while (true) {
if (curr == null) {
System.out.println("你要查找的" + name + " 不存在");
break;
}
if (curr.getName().equals(name)) {// 如果下一个节点的数据域和要查找的数据域一样
System.out.println("你要查找的" + name + "在第" + i + "个位置!");
break;
} else {
curr = curr.getNext();
i++;// 位置++
}
}
}
/**
* 根据name删除
*/
public void delbyname(String name) {
Node curr = head.getNext();
Node temp = null;
while (true) {
if (curr.getName().equals(name)) {
break;
}
temp = curr;
curr = curr.getNext();
}
temp.setNext(temp.getNext().getNext());
}
//获取第一个
//获取最后一个
//添加到头部
//添加到尾部
//移除第一个
//移除最后一个
// 遍历链表
public void display() {
Node curr = head.getNext();// 从头节点的下一个节点开始遍历
while (curr != null) {
System.out.println(curr.getName());
curr = curr.getNext();// 把下一个节点赋给当前节点
}
}
//测试方法
public static void main(String[] args) {
Link l = new Link();
l.addNode("A");
l.addNode("B");
l.addNode("C");
l.addNode("D");
l.addNode("E");
//根据位置插入节点
//l.insertNode(3, "F");
///l.insertNode(4, "G");
//根据位置删除
//l.delById(3);
//根据位置查找内容
l.selbyid(3);
//l.selname("F");
//l.delbyname("C");
//遍历
l.display();
}
}