链表的节点类
class LinkedNode{//节点
public int data;
public LinkedNode next = null;
public LinkedNode(int data){
this.data = data;
}
}
在链表中插入元素
1.头插法
public void addFirst(int elem){ //1.头插
LinkedNode node = new LinkedNode(elem);//创建一个节点
//空链表的情况
if(this.head == null){
this.head = node;
return;
// node.next = null;
}
//非空链表的情况
node.next = head;
this.head = node;
return;
}
测试:
public class Test {
public static void main(String[] args){
LinkedList a = new LinkedList();
a.addFirst(1);
a.addFirst(2);
a.addFirst(3);
a.addFirst(4);
a.addFirst(5);
a.addFirst(6);
System.out.println("addFirst");//头插法测试
a.display();
}
}
打印链表中的元素
2.尾插法
public void addLast(int elem){ //2.尾插法
LinkedNode node = new LinkedNode(elem);//创建节点
LinkedNode cur = this.head;
//空链表的情况,直接将新添加的元素跟在head之后
if(this.head == null){
this.head = node;
return;
}
//非空链表的情况
//(1)遍历链表,找到最后一个元素
//(2)将新的元素添在之后
while(cur.next != null){
cur = cur.next;
}
cur.next = node;
return;
}
测试:
public class Test {
public static void main(String[] args){
LinkedList a = new LinkedList();
a.addLast(1);
a.addLast(2);
a.addLast(3);
a.addLast(4);
a.addLast(5);
a.addLast(6);
System.out.println("addLast");//尾插法测试
a.display();
}
}
测试结果:
3.获取链表的长度
public int size(){// 获取链表的长度
LinkedNode node = head;
while (node != null){
len++;
node = node.next;
}
System.out.print("链表长度");
System.out.println(this.len);
return this.len;
}
测试:
public class Test {
public static void main(String[] args){
LinkedList a = new LinkedList();
a.addLast(1);
a.addLast(2);
a.addLast(3);
a.addLast(4);
a.addLast(5);
a.addLast(6);
a.display();
a.size();//测试获取链表的长度
}
}
测试结果:
4.判断链表中是否包含某元素
public boolean contains(int elem){ // 4. 包含元素
if(head == null){
return false;
}
for(LinkedNode cur = this.head;cur != null;cur = cur.next){
if(cur.data == elem){
System.out.println("yes");
return true;
}
}
return false;
}
测试1(包含元素的情况):
public class Test {
public static void main(String[] args){
LinkedList a = new LinkedList();
a.addLast(1);
a.addLast(2);
a.addLast(3);
a.addLast(4);
a.addLast(5);
a.addLast(6);
a.display();
a.contains(2);// 测试是否包含某元素
}
测试结果:
测试2(空链表的情况):
public class Test {
public static void main(String[] args){
LinkedList a = new LinkedList();
a.display();
a.contains(2);// 测试是否包含某元素
}
测试结果:
测试3(元素不存在的情况):
public class Test {
public static void main(String[] args){
LinkedList a = new LinkedList();
a.addLast(1);
a.addLast(2);
a.addLast(3);
a.addLast(4);
a.addLast(5);
a.addLast(6);
a.display();
a.contains(100);// 测试是否包含某元素
}
测试结果:
5.移除链表中的指定元素
public void remove(int toRemove){// 5. 移除元素
LinkedNode cur = head;
if(toRemove == this.head.data){//要删除的元素是头节点
this.head = this.head.next;
return;
}
while(cur != null){//要移除的元素不是头节点
LinkedNode prev = cur;
cur = cur.next;
if(toRemove == cur.data){
if(cur.next == null){//要移除的元素在链表末尾
prev.next = null;
return;
} else{//要移除的元素不在末尾
prev.next = cur.next;
return;
}
}
}
return;
}
}
测试1(删除的元素为头节点):
public class Test {
public static void main(String[] args){
LinkedList a = new LinkedList();
a.addLast(1);
a.addLast(2);
a.addLast(3);
a.addLast(4);
a.addLast(5);
a.addLast(6);
a.display();
a.remove(1);
a.display();
}
}
测试结果:
测试2(要删除的元素为末尾元素):
public class Test {
public static void main(String[] args){
LinkedList a = new LinkedList();
a.addLast(1);
a.addLast(2);
a.addLast(3);
a.addLast(4);
a.addLast(5);
a.addLast(6);
a.display();
a.remove(6);
a.display();
}
}
测试结果:
测试3(要删除的元素在中间位置):
public class Test {
public static void main(String[] args){
LinkedList a = new LinkedList();
a.addLast(1);
a.addLast(2);
a.addLast(3);
a.addLast(4);
a.addLast(5);
a.addLast(6);
a.display();
a.remove(3);
a.display();
}
}
测试结果:
源代码:
class LinkedNode{//节点
public int data;
public LinkedNode next = null;
public LinkedNode(int data){
this.data = data;
}
}
public class LinkedList{
private LinkedNode head = null;//创建头节点
public int len = 0;
public void addFirst(int elem){ //1.头插法
LinkedNode node = new LinkedNode(elem);//创建一个节点
//空链表的情况
if(this.head == null){
this.head = node;
return;//没有return会怎么样呢
// node.next = null;
}
//非空链表的情况
node.next = head;
this.head = node;
return;//没有return会怎么样
}
public void addLast(int elem){ //2.尾插法
LinkedNode node = new LinkedNode(elem);//创建节点
LinkedNode cur = this.head;
//空链表的情况,直接将新添加的元素跟在head之后
if(this.head == null){
this.head = node;
return;
}
//非空链表的情况
//(1)遍历链表,找到最后一个元素
//(2)将新的元素添在之后
while(cur.next != null){
cur = cur.next;
}
cur.next = node;
return;
}
public int size(){// 获取链表的长度
LinkedNode node = head;
while (node != null){
len++;
node = node.next;
}
System.out.print("链表长度:");
System.out.println(this.len);
return this.len;
}
public boolean contains(int elem){ // 4. 包含元素
if(head == null){
return false;
}
for(LinkedNode cur = this.head;cur != null;cur = cur.next){
if(cur.data == elem){
System.out.println("yes");
return true;
}
}
return false;
}
public void remove(int toRemove){// 5. 移除元素
LinkedNode cur = head;
//要删除的元素是头节点
if(toRemove == this.head.data){//要删除的元素是头节点
this.head = this.head.next;
return;
}
while(cur != null){//要移除的元素不是头节点
LinkedNode prev = cur;
cur = cur.next;
if(toRemove == cur.data){
if(cur.next == null){//要移除的元素在链表末尾
prev.next = null;
return;
} else{//要移除的元素不在末尾
prev.next = cur.next;
return;
}
}
}
return;
}
// n.打印链表
public void display(){
System.out.println("打印链表:");
System.out.print("[");
for(LinkedNode node = head;node!= null;node = node.next){
System.out.print(node.data);
if(node.next != null){
System.out.print(" , ");
}
}
System.out.println("]");
}
}