简直offer之链表的插入和删除

在插入和删除链表的时候一定要注意不要让链表断了,另外要特别注意对头结点的单独考虑

参考剑指offer上第50页删除给定值的结点的代码。得知,要删除一个节点必须知道该节点的前一个节点。书上的代码使用pNode.next 和pNode。next.value来判断的

下面把代码附上,有个问题

public static ListNode deleteNode(ListNode head,int value){
        if(head==null){
            return null;
        }
        ListNode toBeDelete = null;
        if(head.val==value){
            toBeDelete = head;
        }
        else{
            ListNode pHead = head;
            while(pHead.next!=null&&pHead.next.val!=value){
                pHead = pHead.next;
            }
            if(pHead.next!=null&&pHead.next.val==value){
                toBeDelete = pHead.next;
                pHead.next = pHead.next.next;
            }
        }
        if(toBeDelete!=null){
            toBeDelete = null;
        }
        return head;
    }
时间: 2024-09-30 16:01:06

简直offer之链表的插入和删除的相关文章

数据结构Java实现03----单向链表的插入和删除

数据结构Java实现03----单向链表的插入和删除 文本主要内容: 链表结构 单链表代码实现 单链表的效率分析 一.链表结构:            概念: 链式存储结构是基于指针实现的.我们把一个数据元素和一个指针称为结点.   数据域:存数数据元素信息的域. 指针域:存储直接后继位置的域. 链式存储结构是用指针把相互直接关联的结点(即直接前驱结点或直接后继结点)链接起来.链式存储结构的线性表称为链表. 链表类型: 根据链表的构造方式的不同可以分为: 单向链表 单向循环链表 双向循环链表 二

单链表实现“插入”和“删除”操作

在单链表中,又如何实现"插入"和"删除"操作呢? 插入操作: 假设我们要在线性表的两个数据元素a和b之间插入一个数据元素x,已知p为其单链表存储结构中指向结点a的指针.为插入数据元素x,首先要生成一个数据域为x的结点,然后插入在单链表中.根据插入操作的逻辑定义,还需修改结点a中的指针域,令其指向结点x,而结点x中的指针域应该指向b结点,从而实现3个元素a,b和x之间逻辑关系的变化. 假设s为指向结点x的指针.则上述指针修改用语句描述即为: s->next=p-

链表的插入、删除

结构体: 1 typedef struct Student{ 2 int m_val; 3 struct Student* m_next; 4 }NODE,*pNODE; 链表的插入: 1 //尾部插入 2 void linkInitTail(pNODE* pphead) 3 { 4 int val; 5 pNODE pNew,pTail; 6 while(scanf("%d",&val) == 1) 7 { 8 pNew = (pNODE)calloc(1,sizeof(NO

面试之路(10)-BAT面试之java实现单链表的插入和删除

链表的结构: 链表在空间是不连续的,包括: 数据域(用于存储数据) 指针域(用于存储下一个node的指针) 单项链表的代码实现: 节点类 构造函数 数据域的get,set方法 指针域的get,set方法 代码: public class Node { Object element; //数据域 Node next; //指针域 //构造方法 public Node(Object obj, Node nextval) { this.element = obj; this.next = nextva

Partition List(链表的插入和删除操作,找前驱节点)

Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x. You should preserve the original relative order of the nodes in each of the two partitions. For example,Given 1->4->3->2

C++链表的插入与删除

#include<iostream>#include<limits>using namespace std;class Date{public: Date ():date(1){} Date(int number):date(number){} virtual ~Date(){} int GetDate()const {return date;} virtual void print() const = 0; private: int date;};class Book:publi

单链表的插入和删除

1 #define OKO 1 2 #define ERROR 0 3 typedef struct Lnode{ 4 ElemType data;//数据域 5 struct Lnode *next; //指针域 6 }Lnode,*Linklist; 7 Lnode *LocateElem_L(Linklist L,Elemtype e){ 8 //在链表中查找值为e的数据元素 9 Lnode *p; 10 p=L->next; 11 while(p&&p->data!=e

静态链表的插入和删除

小结: 1.线性链表.静态链表 <数据结构>严 0 1 2 3 4 5 6 7 8 ZHAO QIAN SUN LI ZHOU WU ZHENG WANG 1 2 3 4 5 6 7 8 0 第一行为顺序号,可作为指针值 第二行为节点值 第三行指针值 初始状态 0->1 1->2 ... 7->8 8->0 插入SHI,在LI之后 注意2点:插入式放在末尾 “插入SHI”:第一步,指针值没有改变 0 1 2 3 4 5 6 7 8 9 ZHAO QIAN SUN LI

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

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