单链表(带头节点)
定义节点
class Node {
public int val;
public Node next;
public Node(int val) {
this.val = val;
}
@Override
public String toString() {
return "Node{" +
"val=" + val +
'}';
}
}
创建带头节点的链表
class SingleLinkedLsit {
private Node head = new Node(0);
public Node getHead() {
return head;
}
}
单链表(带头结点)相关操作
class SingleLinkedLsit{
private Node head= new Node(0);
//添加节点
public void add(Node node){
Node temp = head;
while(true){
if(temp.next==null){
temp.next=node;
break;
}else {
temp=temp.next;
}
}
}
先让temp指向头结点,当temp.next!=null,temp=temp.next,直到temp.next==null 将新节点加入链表即temp.next=node;
//按下标添加节点
public void addByIndex(Node node){
Node temp= head;
boolean flag =false;
while(true){
if(temp.next==null){
break;
}
if(temp.next.val>node.val){
break;
}else if (temp.next.val==node.val){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
System.out.println("当前值已存在");
}else{
node.next = temp.next;
temp.next= node;
}
}
//删除节点
若要删除node2,temp指向要删除节点的前一节点node1,temp.next=temp.next.next即可;
public void delete(int no){
Node temp = head;
boolean flag =false;
while(true){
if(temp.next==null){
break;
}
if(temp.next.val==no){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
temp.next =temp.next.next;
}else {
System.out.println("不存在要删除的节点");
}
}
显示节点信息
public void show(){
if(head.next==null){
System.out.println("当前链表节点为空");
return;
}
Node temp = head.next;
while(temp!=null){
System.out.println(temp);
temp=temp.next ;
}
}
}
修改节点信息
public void modify(int no,int val) {
if(head.next==null){
System.out.println("当前链表为空,不能修改");
}
boolean flag= false;
Node temp = head.next;
while(temp!=null){
if(temp.val == no){
flag= true;
break;
}else{
temp=temp.next;
}
}
if(flag){
temp.val=val;
}else{
System.out.println("要修改的节点不存在");
}
}