链表是一种链式存储的结构,使用节点进行存储,一个节点分成数据域和指针域,指针域(next域,后面都说next域)指向下一个节点。链表的各个节点不一定是连续存储的,因为每个节点在内存中的位置不一定是连续的
节点的定义
public class Node {
private int no;
public Node next;
private String name;
public int getNo() {
return no;
}
public String getName() {
return name;
}
public Node(int no, String name) {
this.no = no;
this.name = name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Node{" +
"no=" + no +
", name='" + name + '\'' +
'}';
}
}
增加节点
增加节点就是找到链表的末端节点,将末端节点的next域指向需要加入的节点就完成了节点的增加
//增加节点
public void addNode(Node node){
Node temp = head; //设置一个临时遍历节点
while(true){
if(temp.next == null){ //如果最后一个的下一个为null退出循环
break;
}
temp = temp.next; //条件不满足的话,temp进行后移
}
temp.next = node;
}
删除节点
删除节点就是找到需要删除的节点,然后将该节点的前一个节点的next域指向要删除节点的下一个节点,即完成了对节点的删除。代码:
public void deleteNode(int no){
if(isEmpty()){
System.out.println("链表为空,无法进行删除操作");
}
Node temp = head; //设置一个临时遍历节点
Boolean flag = false;
while(true){
if(temp.next.getNo() == no){ //如果当前节点的下一个节点的编号与要删除的编号相同,将标志设为true,并退出循环
flag = true;
break;
}else if(temp.next == null){
break;
}
temp = temp.next; //条件不足,节点后移
}
if(flag){
temp.next = temp.next.next;
}else{
System.out.println("要删除的" + no + "节点不存在");
}
}
//判断链表是否为空
public Boolean isEmpty(){
if(head.next == null){
return true;
}else{
return false;
}
}
修改节点
修改节点即找到需要修改的节点,然后将需要修改的内容重新进行赋值操作就行了。
public void updateNode(Node node){
if(isEmpty()){ //判断链表是否为空
System.out.println("链表为空");
return;
}
Node temp = head.next; //设置一个临时的节点进行遍历
Boolean flag = false; //用来标记是否有与要修改的节点相同标号的节点
while(temp != null){
if(temp.getNo() == node.getNo()){
flag = true;
break;
}
temp = temp.next;
}
if(flag){
temp.setName(node.getName());
System.out.println("修改成功");
}else{
System.out.println("未找到需要修改的节点");
}
}
查找节点
查找节点的思路和前面的思路一样,都是找一个临时节点,让临时节点对链表进行遍历,这样做的目的就是为了不改变原来的链表的结构。
public Node findNode(int no){
if(isEmpty()){
System.out.println("链表为空,查找失败");
return null;
}
Node temp = head.next;
Boolean flag = false; //用来标记是否找到节点
while(temp != null){
if(temp.getNo() == no){
flag = true;
break;
}
temp = temp.next;
}
if(flag){
System.out.println("查找成功");
return temp;
}else{
System.out.println("查找失败,未找到该节点或输入错误");
return null;
}
}