链表(篇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

相关文章

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

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数