单向链表的删除及插入操作(以头插入法建立单向链表)

注意插入和删除操作中的限制约束条件。

class ListNode {
    ListNode next;
    int val;
    public ListNode(int x) {
        val = x;
    }
}
public class LinkList {
    private ListNode curr = null;
    public void appendToHead(int d) {
        ListNode tail = new ListNode(d);
        tail.next = curr;
        curr = tail;
    }
    public void printAppendToHead() {
        while (curr != null) {
            System.out.println(curr.val);
            curr = curr.next;
        }
    }
    public void delete(int d) throws Exception { //假设要删除的元素在该链表只出现一次。
        if(curr == null) throw new Exception("empty LinkList");
        if(curr.val == d) {curr = curr.next; return;}
        ListNode tmp = curr;
        while (tmp.next != null) {
            if(tmp.next.val == d) {tmp.next = tmp.next.next; return;}
            tmp = tmp.next;
        }
        return;
    }
    public void insert(int d) { //假设链表中的元素降序排列。
        if(curr == null) {curr = new ListNode(d); return;}
        if(d > curr.val) {
            ListNode tmp = new ListNode(d);
            tmp.next = curr;
            curr = tmp;
            return;
        }
        ListNode currTmp = curr;
        while (currTmp.next != null) {
            if(d > currTmp.next.val) {
                ListNode tmp = new ListNode(d);
                tmp.next = currTmp.next;
                currTmp.next = tmp;
                return;
            }
            currTmp = currTmp.next;
        }
        ListNode tmp = new ListNode(d);
        currTmp.next = tmp;
        return;
    }

    public static void main(String[] args) throws Exception {
        int[] array = new int[] {1, 2, 2, 3, 4};
        LinkList llist = new LinkList();
        for (int i = 0; i < array.length; i++) {
            llist.appendToHead(array[i]);
        }
//        llist.delete(3);
        llist.insert(0);
        llist.printAppendToHead();
    }
}
时间: 2024-10-21 20:33:33

单向链表的删除及插入操作(以头插入法建立单向链表)的相关文章

单链表插入操作

URL:http://jpkc.onlinesjtu.com/CourseShare/Courses/ResourceModule/PreReading.aspx?courseid=701018&nodid=238&chapterid=238&preid=16 单链表的插入操作 1)已知线性链表head,在p指针所指向的结点后插入一个元素x. 在一个结点后插入数据元素时,操作较为简单,不用查找便可直接插入. 操作过程如下图所示: 相关的语句如下: { s=(slnodetype*)

指针、链表的原理和各类操作相关心得以及学生信息管理系统

伴随着学期末的到来,C语言程序设计这门课也接近尾声.经过前两次的教学,我们对C语言也有了深刻的了解,学习的内容也不断的加深.这次我们就学习了C语言程序设计里应用最广泛,也是最难学习的知识--链表和指针的应用. 关于指针和链表这两个的应用和上次的管理系统有着直接的关系,没有添加链表和指针的管理系统无法做到精确的查找.数据存储方面也显得不方便.所以指针和链表的作用能够直接指向你所需要的数据地址,使程序更加完善.这次我就利用指针的应用制作了一个管理员工工资等信息的程序. §1 指向结构体变量的指针变量

就C语言的指针、链表的原理和各类操作撰写一篇技术博客,说说自己学习C语言指针和链表的体会

一.指向结构体变量的指针变量 指向结构体变量的指针变量的定义形式与一般指针变量的定义形式相同,只是将其指向类型定义为结构体类型即可.例如:        struct person            { charname[20];             char sex;             int age;             float height;            };       struct person *p;则指针变量p,它可以指向struct person类

单链表的读取、插入与删除

链表是由一个个结点构成,而每一个结点都是由存储数据的数据域以及存储下一个结点地址的地址域两部分构成. 链表的一大优点就是,可以在任意两个数之间毫无限制的插入无限多的数据.在很多时候,我们都需要对数据做个查找工作,就比如,一个班的同学去上课,结果老师发现人数不对,于是就开始点名,点到后来发现某某某同学没有到,这就是典型的数据查找.那么如何实现对链表的数据元素的查找呢? 比如,我想知道链表的第5个元素的值是多少,我应该怎么做呢?由于,链表是依靠地址来查找数据的,那比如说链表的第一个结点的数据域中保存

数据结构:链表的基本操作(创建,删除,插入,逆序,摧毁)

代码注释比较详细: #include <iostream> #include <cstdlib> using namespace std; struct Node{ int data; Node* next; }; Node* head = NULL; bool create() { head = (Node*)malloc(sizeof(Node)); if(NULL == head) return false; head->data = 0; head->next

链表的创建,插入,删除,输出基本操作

#include<stdio.h>#include<cstdlib> struct student  //定义一个学生结点,结点包括值域和指针域{ int num;//学号 char name[20];//姓名 char address[20];//地址 struct student *next;//定义结点的指针域,指向下一个结点};typedef struct student LIST;LIST *CreateList();LIST *InsertNode(LIST *h,LI

链表的创建,插入,删除,输出

我用的是头插法 #include<stdio.h> #include<malloc.h> #define TURE 1 #define FLASE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *ne

有序链表的插入操作

C语言教材的有序单链表程序的插入我并不满意,因为链表为空,表尾等原因导致有四种情况要处理,给同学们的阅读造成困难.书上的做法较复杂的一个原因是链表是不带头结点的,所以要考虑新结点插入时会不会变成表头, 例如:当链表为空时, 插入3, 3变成表头,  再插入1, 链表为1->3, 链表头指向1, 代码必须处理这样的情况. 第一部分: 不含头结点的链表插入的非常规思路 下面我给出另外一个思路,新结点一律插入表头,这样就不要考虑链表为空的情况了.但是可能无序,可以从表头开始,相邻节点不符合次序要求交换

链表的插入操作总结

链表是一种经常使用的数据结构,有单链表, 双向链表及其循环链表之分. 插入操作是链表的基本操作之中的一个.但大部分人在初学时,多少会感到有些迷惑. 以下时本人的一些小经验. 1 后向插入和前向插入 如果当前节点为P. 后向插入是指在p节点后插入新节点. 前向插入是指在p节点后插入新节点. 对于单链表而言,仅仅有后向插入. 2 基本规律 1) 先保存原链表结构不变,即先改动新节点的前后指针,然后再先远后近. 2) 先远后近是指先改动离p节点远的指针,在改动离它近的指针. 3 链表操作示意图 下图是