链表(篇1)循环有序链表中插入节点

2024-09-04 02:08

本文主要是介绍链表(篇1)循环有序链表中插入节点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在循环有序链表中插入一个新值。例如:

这里写图片描述

插入7之后

这里写图片描述


算法:
为新插入的节点分配内存,并将数据放在新分配的节点中。让指向新节点的指针是new_node。在内存分配之后,以下是需要处理的三种情况。

1)链接为空:  a)因为new_node是循环链表中的唯一节点,所以进行自循环。      new_node-> next = new_node;  b)更改头指针以指向新节点。head_ref = new_node;
2)新节点要在头节点之前插入:    (a)使用循环找出最后一个节点。while(current-> next!= * head_ref)current = current-> next;(b)更改最后一个节点的下一个。 current-> next = new_node;(c)将新节点的下一个更改为指向头。new_node-> next = * head_ref;(d)将头指针改变为指向新节点。* head_ref = new_node;
3)新节点要插入头部之后的某处:(a)找到要插入新节点的节点。while(current-> next!= * head_ref && current-> next-> data <new_node-> data){current = current-> next; }}(b)将new_node的下一个作为定位指针的下一个new_node-> next = current-> next;(c)更改下一个的指针current-> next = new_node; 

代码


// Java program for sorted insert in circular linked listclass Node
{int data;Node next;Node(int d){data = d;next = null;}
}class LinkedList
{Node head;// ConstructorLinkedList()   { head = null; }/* function to insert a new_node in a list in sorted way.Note that this function expects a pointer to head nodeas this can modify the head of the input linked list */void sortedInsert(Node new_node){Node current = head;// Case 1 of the above algoif (current == null){new_node.next = new_node;head = new_node;}// Case 2 of the above algoelse if (current.data >= new_node.data){/* If value is smaller than head's value thenwe need to change next of last node */while (current.next != head)current = current.next;current.next = new_node;new_node.next = head;head = new_node;}// Case 3 of the above algoelse{/* Locate the node before the point of insertion */while (current.next != head &&current.next.data < new_node.data)current = current.next;new_node.next = current.next;current.next = new_node;}}// Utility method to print a linked listvoid printList(){if (head != null){Node temp = head;do{System.out.print(temp.data + " ");temp = temp.next;}  while (temp != head);}}// Driver code to test abovepublic static void main(String[] args){LinkedList list = new LinkedList();// Creating the linkedlistint arr[] = new int[] {12, 56, 2, 11, 1, 90};/* start with empty linked list */Node temp = null;/* Create linked list from the array arr[].Created linked list will be 1->2->11->12->56->90*/for (int i = 0; i < 6; i++){temp = new Node(arr[i]);list.sortedInsert(temp);}list.printList();}
}

这篇关于链表(篇1)循环有序链表中插入节点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134693

相关文章

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与