链表_有序链表(插入删除遍历)

插入的节点位置有两种情况,一是有previous节点,而是没有previous节点

//链结点
public class Link {
    public long dData;
    public Link next;
    public Link(long dd) {
        dData=dd;
    }
    public void displayLink() {
        System.out.print(dData+" ");
    }

}
public class SortedList {
    private Link first;
    public SortedList() {
        first=null;
    }
    //插入数据
    public void insert(long key) {
        Link newLink=new Link(key);
        //为找到插入点做准备
        Link previous=null;//记录插入点的左节点
        Link current=first;//记录插入点的右节点
        //寻找插入点
        while(current!=null&&key>current.dData) {//判断current!=null的原因是如果key是最大值,找不到比它大的,也需要退出循环
            //假设first端的数据是最小的
            previous=current;
            current=current.next;
        }
        //说明key是最小值
        if(previous==null)
            first=newLink;//改变first即可
        else
            previous.next=newLink;//不为空,与左侧需要连接

        newLink.next=current;//就算key是最大值,current会是null,这样也成立

    }
    //从first端删除
    public Link remove() {
        Link temp=first;
        first=first.next;
        return temp;
    }
    //遍历
    public void display() {
        System.out.println("List(Fist-->last):");
        Link current=first;
        while(current!=null) {
            current.displayLink();
            current=current.next;
        }
        System.out.println();
    }

}
public class Test {

    public static void main(String[] args) {
        SortedList theSortedList=new SortedList();
        theSortedList.insert(20);
        theSortedList.insert(40);
        theSortedList.display();
        theSortedList.insert(10);
        theSortedList.insert(30);
        theSortedList.insert(50);
        theSortedList.insert(55);
        theSortedList.display();
        theSortedList.remove();
        theSortedList.display();

    }

}
时间: 2024-11-01 07:07:27

链表_有序链表(插入删除遍历)的相关文章

Java单链表、双端链表、有序链表实现

Java单链表.双端链表.有序链表实现 原创 2014年03月31日 23:45:35 标签: Java / 单链表 / 双端链表 / 有序链表 65040 单链表: insertFirst:在表头插入一个新的链接点,时间复杂度为O(1) deleteFirst:删除表头的链接点,时间复杂度为O(1) 有了这两个方法,就可以用单链表来实现一个栈了,见http://blog.csdn.net/a19881029/article/details/22579759 find:查找包含指定关键字的链接点

数据结构 链表_单链表的接口定义

链表可以说是一种最为基础的数据结构.链表由一组元素以一种特定的顺序组合或链接而成,在维护数据的集合时很有用.这一点同我们常用的数组很相似.然而,链表在很多情况下比数组更有优势.特别是在执行插入和删除操作时链表拥有更高的效率.链表需要动态的开辟存储空间,也就是存储空间是在程序运行时分配的.由于在很多应用中数据的大小在编译时并不能确定,因此这种动态分配空间的特性也是链表的一个优点. 单链表介绍 单链表(简称为链表)由各个元素之间通过一个指针彼此链接起来而组成.每个元素包含两个部分:数据成员和一个称为

【计蒜课】【数据结构】【链表的创建、插入、遍历操作的复习】

#include <stdio.h>#include <stdlib.h> typedef struct Node{ int data; struct Node *next; }Node, *LinkedList; LinkedList insert(LinkedList head, Node *node, int index) { if (head == NULL) { if (index != 0) { printf("failed\n"); return

【链表】有序链表中移除重复项

1 public class Main { 2 3 public Node removeDup(Node node){ 4 5 if (node == null || node.next == null || node.next.next == null){ 6 return node; 7 } 8 9 Node pre = node.next; 10 Node cur = node.next.next; 11 12 while (cur != null){ 13 if (cur.data ==

Java 实现有序链表

有序链表: 按关键值排序. 删除链头时,就删除最小(/最大)的值,插入时,搜索插入的位置. 插入时须要比較O(N),平均O(N/2),删除最小(/最大)的在链头的数据时效率为O(1), 假设一个应用须要频繁的存取(插入/查找/删除)最小(/最大)的数据项,那么有序链表是一个不错的选择 优先级队列 能够使用有序链表来实现 有序链表的插入排序: 对一个无序数组,用有序链表来排序,比較的时间级还是O(N^2) 复制时间级为O(2*N),由于复制的次数较少,第一次放进链表数据移动N次,再从链表拷贝到数组

「C语言」单链表/双向链表的建立/遍历/插入/删除

最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合,一种面向过程的MVC的感觉. 而这一切的基础就在于对链表的创建.删除.输出.写入文件.从文件读出...... 本篇文章在于巩固链表的基础知识(整理自<C语言程序设计教程--人民邮电出版社>第十章),只对链表的概念及增删改查作出探讨,欢迎指教. 一.链表结构和静态/动态链表 二.单链表的建立与遍历

链表(三)——链表删除冗余结点&amp;插入结点到有序链表

1.一个以递增方式排列的链表,去掉链表中的冗余值. 思路一:设有两个指针p和q,使p不动,q依次往后循环直到p->data不等于q->data,再将中间的冗余数据删除. 思路二:设有两个指针p和q,使p在前,q在后,只要找到一个冗余就删除一个,依次往后删除. 输入的链表:1 3 3 3 3 6 6 8 9 10 删除后的链表:1 3 6 8 9 10 比较两种思路,思路二的想法相比于思路一要好,所以这里实现思路二的代码. 2.将一个结点插入到一个有序的链表中. 思路:首先要判定这个链表是递增排

链表(三)——链表删除冗余结点&amp;amp;插入结点到有序链表

1.一个以递增方式排列的链表,去掉链表中的冗余值. 思路一:设有两个指针p和q.使p不动,q依次往后循环直到p->data不等于q->data,再将中间的冗余数据删除. 思路二:设有两个指针p和q,使p在前,q在后,仅仅要找到一个冗余就删除一个,依次往后删除. 输入的链表:1 3 3 3 3 6 6 8 9 10 删除后的链表:1 3 6 8 9 10 比較两种思路.思路二的想法相比于思路一要好.所以这里实现思路二的代码. 2.将一个结点插入到一个有序的链表中. 思路:首先要判定这个链表是递增

单链表的创建,插入,删除,遍历

1 #include<stdio.h> 2 #include<iostream> 3 #include<malloc.h> 4 #define OK 1 5 #define ERROR 0 6 using namespace std; 7 typedef struct LNode 8 { 9 int data; 10 struct LNode *next; 11 } LNode,*LinkList; 12 13 void Init(LinkList &L)///