最简单易懂的单链表常用操作总结Java实现

定义单链表节点类

//定义一个链表类
public class ListNode{	
    //定义头结点
    private int head;
    //定义链表数据域
    private int data;
    //定义链表指针域
    private next;
    //定义链表长度
	private int length;
    //定义无参构造函数
    public ListNode() {}
	//链表类构造函数
	public ListNode(int data){
        this.data = data;
	}
}

链表判空

if(head.next == null){
	return true;
}else{
	return false;
}

遍历链表

ListNode newNode = head.next;
while(newNode != null){
    System.out.println(newNode.data);
    newNode = newNode.next;
}

求单链表长度

ListNode newNode = head.next;
int length = 0;
while(newNode != null){
	newNode = nweNode.next;
	length ++;
}

按位查找(访问结点序号为 i 的结点,并返回对应值)

ListNode newNode = head.next;
int count = 1;
while(newNode != null && count < i){
	newNode  = newNode.next;
	count ++;
}
if(newNode == null){
	System.out.println("查找未知错误!");
}else{
	return newNode.data;
}

按值查找(返回值等于x的结点在链表中的序号)

ListNode newNode = head.next;
int count = 1;
while(newNode != null){
	if(newNode.data == x){
		return count;
	}
	newNode = newNode.next;
	count ++;
}

表中插入结点

ListNode newNode, node;
newNode.next = node.next;
node.next = newNode;

插入操作(在位置 i 处,插入值为 x 得新结点newNode)

ListNode node = head;
ListNode newNode = null;
int count = 0;
while(node != null && count < i -1){
	node = node.next;
	count ++;
}
if(node == null){
	System.out.println("插入位置错误!")}else{
	ListNode newNode;
	newNode.data = x;
	newNode.next = node.next;
	node.next = newNode;
}

链表头部插入新节点

ListNode newNode;
newNode.next = head;
this.head = newNode;
length ++;

将新节点插到头结点后面

ListNode newNode;
newNode.next = head.next;
head.next = newNode;
length ++;

在链表尾部插入元素

ListNode head;
ListNode node = head;
ListNode lastNode = null;
for(int i = 0; i < n; i ++){
	ListNode lastNode;
	node.next = lastNode;
	node = lastNode;
}
lastNode.next = null;

删除表头结点

ListNode savaNode;
saveNode = head;
head = head.next;
delete saveNode;

删除表中结点或表尾结点

ListNode saveNode;
ListNode currentNode;
saveNode = currentNode.next;
currentNode.next = saveNode.next;
delete saveNode;

删除操作

Data x;
ListNode node = head;
ListNode saveNode = null;
int count = 0;
while(node != null && count < i - 1){
	node = node.next;
	count ++;
}
if(node == null || node.next == null){
	System.out.println("删除位置错误!")}else{
	saveNode = node.next;
	x = save.data;
	node.next = saveNode.next;
	delete saveNode;
	return x;
}

析构函数(销毁单链表)

ListNode node = head;
while(node != null){
	head = head.next;
	delete node;
	node = head;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值