C语言实现单链表节点的删除(带头结点)

我在之前一篇博客《C语言实现单链表节点的删除(不带头结点)》中具体实现了怎样在一个不带头结点的单链表的删除一个节点,在这一篇博客中我改成了带头结点的单链表。代码演示样例上传至 https://github.com/chenyufeng1991/DeleteLinkedList_HeadNode。删除类型有两种:

(1)删除某个位置pos的节点;

(2)推断x值是否在链表中,若存在则删除该节点;

核心代码例如以下:

//删除某个位置pos的节点
Node *DeletePosNode(Node *pNode,int pos){

    int i = 1;
    Node *pMove;
    Node *pMovePre;
    pMovePre = pNode;
    pMove = pNode->next;
    while (pMove != NULL) {
        if (i == pos) {

            pMovePre->next = pMove->next;
            free(pMove);
            pMove = NULL;
            printf("%s函数运行。在pos=%d位置删除节点成功\n",__FUNCTION__,pos);
            return pNode;
        }
        i++;
        pMovePre = pMovePre->next;
        pMove = pMove->next;
    }

    printf("%s函数运行,在pos=%d位置删除节点失败\n",__FUNCTION__,pos);

    return pNode;
}

//推断x值是否在链表中,若存在则删除该节点
Node *DeleteValueNode(Node *pNode,int x){

    Node *pMovePre;
    Node *pMove;
    pMovePre = pNode;
    pMove = pNode->next;
    while (pMove != NULL) {
        if (pMove->element == x) {
            pMovePre->next = pMove->next;
            free(pMove);
            pMove = NULL;

            printf("%s函数运行,删除value=%d节点成功\n",__FUNCTION__,x);
            return pNode;
        }
        pMovePre = pMovePre->next;
        pMove = pMove->next;
    }

    printf("%s函数运行,删除value=%d节点失败\n",__FUNCTION__,x);

    return pNode;
}
时间: 2024-08-01 10:46:13

C语言实现单链表节点的删除(带头结点)的相关文章

数据结构-编程实现一个单链表节点的删除

1:代码如下: // ConsoleApplication15.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <malloc.h> #include <iostream> using namespace std; typedef struct node//定义链表结构体 { int data;//节点内容 node *next;//指向结构体的指针,下一个节点 }node; node *create()

【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)

所实现的循环单链表的结构如下图所示: 循环单链表的实现,和上一篇文章单链表的实现大致相同点击打开链接,略有区别: 1:循环判断的条件不再是s == NULL或者s->next == NULL,而是他们是否等于头指针.2: 断开链表时的处理,尾节点的next不是NULL,而是指向头结点 具体细节参考上一篇文章 头文件:SCList.h #ifndef SCLIST_H #define SCLIST_H #include<iostream> #include<cassert> u

【c++版数据结构】之单链表的实现(带头结点以及尾节点)

所实现的单链表的结构如下图所示: 头文件:SList.h #include<iostream> #include<cassert> using namespace std; typedef enum{FALSE,TRUE}Status; template<class Type> class List; template<class Type> class ListNode { friend class List<Type>; //友元类可以访问该

JAVA单链表的实现-不带头结点且没有尾指针

本程序采用JAVA语言实现了线性表的链式实现.首先定义了线性表的接口ListInterface,然后LList类实现了ListInterface完成了链表的实现. 本实现中,链表是不带表头结点的,且有一个指针始终指向链表中的第一个元素,并没有定义尾指针.因此,每次向链表中插入新结点时需要遍历链表一次. 更详细的解释参考<数据结构与算法分析 JAVA语言描述第二版>Frank M. Carrano 著 ListInterface接口的定义如下: public interface ListInte

JAVA单链表的实现-不带头结点但带有尾指针

1,本程序实现了线性表的链式存储结构.实现的链表带有两个指针,一个始终指向链表中的第一个结点,另一个指针始终指向链表中的最后一个结点. 之所以设置尾指针,是因为,在插入元素到链表中的末尾时,可以通过尾指针直接找到链表的最后一个元素,从而不需要遍历链表就可以完成插入操作. 2,具体实现链表的类名为LList2.java,它首先实现了线性表的接口ListInterface,该接口的定义见:http://www.cnblogs.com/hapjin/p/4549492.html LList2.java

C语言实现单链表(带头结点)的基本操作

我在之前一篇博客<C语言实现单链表(不带头结点)的基本操作>中具体实现了不带头结点的单链表的11种操作:如计算链表长度.初始化.创建链表.清空链表等等.但是在实际使用中,带头结点的单链表往往比不带头结点的单链表用的更多,使用也更为方便.因为不用单独考虑第一个节点的情况了,第一个节点和其他后续节点的处理全都一样了,简化操作.这篇博客将会来实现带头结点的单链表的11种操作.代码上传至: https://github.com/chenyufeng1991/LinkedList_HeadNode  .

C语言实现单链表(不带头结点)节点的插入

对单链表进行增删改查是最主要的操作.我在上一篇博客<C语言实现链表节点的删除>实现了删除单链表中的某个节点. 这里我们要来实如今某个位置插入节点.演示样例代码上传至https://github.com/chenyufeng1991/InsertList  . 核心代码例如以下: Node *InsertToPosition(Node *pNode,int pos,int x){ if (pos < 0 || pos > sizeList(pNode) ) { printf(&quo

C语言实现单链表的节点插入(带头结点)

我在之前一篇博客<C语言实现单链表(不带头结点)节点的插入>中具体实现了怎样在一个不带头结点的单链表中进行节点的插入.可是在实际应用中,带头结点的链表更为经常使用.更为方便.今天我们就要来使用带头结点的单链表进行节点的插入.演示样例代码上传至 https://github.com/chenyufeng1991/InsertList_HeadNode  . 核心代码例如以下: Node *InsertNode(Node *pNode,int pos,int x){ int i = 0; Node

C语言实现非循环双链表节点的删除(带头结点尾结点)

我在之前一篇博客<C语言实现非循环双链表节点的删除(不带头结点)>中详细讲解了不含头尾节点的双链表中删除一个节点,处理过程还是稍显麻烦.自从我们学习使用头尾节点来处理双链表后,删除过程就非常方便.代码上传至 https://github.com/chenyufeng1991/DeleteNodeDoubleLinkedList_HeadList . 核心代码如下: //删除pos位置的节点 int DeletePosList(Node *pHead,Node *pTail,int pos){