#yyds干货盘点# 有序链表的基本用法
Posted wx61dbfa0f42bf6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# 有序链表的基本用法相关的知识,希望对你有一定的参考价值。
有序链表:链表本身是一种无序的数据结构,元素的插入和删除不能保证顺序性,但是有没有有序的链表呢?答案是肯定的,我们在单链表中插入元素时,只需要将插入的元素与头结点及其后面的结点比较,从而找到合适的位置插入即可。一般在大多数需要使用有序数组的场合也可以使用有序链表,有序链表在插入时因为不需要移动元素,因此插入速度比数组快很多,另外链表可以扩展到全部有效的使用内存,而数组只能局限于一个固定的大小中。
有序链表的Java代码实现:
package parking;
import java.util.Random;
class Node
Integer data;
Node next;
public Node(Integer data)
this.data = data;
public class LinkOrder
private Node head;
private int size;
public LinkOrder()
this.head = null;
this.size = 0;
// 判断是否为空
private boolean isEmpty()
return head == null ? true : false;
// 获取链表大小
private int getSize()
return size;
// 在链表中插入一个结点,保持链表有序性(头结点最小,尾结点最大)
public void insert(int key)
Node newLink = new Node(key);
Node previous = null;
Node current = head;
while (current != null && key > current.data) // 找下个节点
previous = current;
current = current.next;
// 比当前节点值小,刚好插入当前节点前面
if (previous == null) // 链表是空的
head = newLink;
else
previous.next = newLink;
newLink.next = current;
size++;
// 返回头结点
private Integer headNode()
if (head == null)
return null;
Integer value = head.data;
return value;
// 删除头结点,并删除
private Integer deleteHnode()
if (head == null)
return null;
Integer value = head.data;
if (head.next == null)
head = null;
else
head = head.next;
size--;
return value;
// 删除指定结点
private void deleteNode(Node node)
if (head == null)
System.out.println("链表为空");
return;
Node current = head;
Node pre = null;
while (current.data != node.data)
if (current.next == null)
System.out.println("没有找到该结点");
return;
pre = current;
current = current.next;
if (current == head)
deleteHnode();
else
pre.next = current.next;
size--;
// 遍历有序链表
private void sysNode()
if (head == null)
System.out.println("该链表为空");
Node current = head;
while (current != null)
System.out.print(current.data + "-->");
current = current.next;
System.out.println();
public static void main(String[] args)
// TODO Auto-generated method stub
LinkOrder order = new LinkOrder();
int i;
Node node;
for (i = 0; i < 5; i++)
order.insert(new Random().nextInt(100));
System.out.println("有序链表大小:" + order.getSize());
order.sysNode();
System.out.println("有序链表头结点:" + order.deleteHnode());
order.sysNode();
node = new Node(new Random().nextInt(100));
System.out.println("删除指定结点:" + node.data);
order.deleteNode(node);
order.sysNode();
效果:
有序链表大小:5
44-->44-->59-->70-->71-->
有序链表头结点:44
44-->59-->70-->71-->
删除指定结点:59
44-->70-->71-->
以上是关于#yyds干货盘点# 有序链表的基本用法的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# leetcode算法题:合并两个有序链表
#yyds干货盘点# 面试必刷TOP101:删除有序链表中重复的元素-I