关闭

链表基本操作的函数实现。(1)

标签: 链表的基本操作
104人阅读 评论(1) 收藏 举报
分类:

如下是一个模拟的链表的基本操作,主要有创建链表,连接链表,打印链表,删除链表等,后面有关链表的算法都依赖这个文件中函数实现。

ListCommon.h

//链表的结构

struct ListNode{
    int m_nValue;
    ListNode* m_pNext;
};

//通用的操作函数

ListNode* CreateListNode(int value);
void ConnectListNodes(ListNode* pCurrent, ListNode* pNext);
void PrintListNode(ListNode* pNode);
void PrintList(ListNode* pHead);
void DestoryList(ListNode* pHead);
//其中的参数是指向指针的指针,
void AddToTail(ListNode** pHead, int value);
void RemoveNode(ListNode** pHead, int value);


ListCommon.cpp

#include <iostream>
#include <stdlib.h>
#include "ListCommon.h"
using namespace std;

//链表的结构
//struct ListNode{
//    int m_nValue;
//    ListNode* m_pNext;
//};

//通用的操作函数

//创建链表节点
ListNode* CreateListNode(int value){
    ListNode* pNode = new ListNode();
    pNode->m_nValue = value;
    pNode->m_pNext = NULL;
}

//连接两个链表节点
void ConnectListNodes(ListNode* pCurrent, ListNode* pNext){
    if(pCurrent == NULL){
        cout << "can not to connect two nodes ! " <<endl;
        exit(1);
    }

    pCurrent->m_pNext = pNext;
}


//打印一个链表节点
void PrintListNode(ListNode* pNode){
    if(pNode == NULL){
        cout << "The node is NULL !" <<endl;
    }else{
        cout << "The value of node is " << pNode->m_nValue <<endl;
    }
}

//打印整个链表,不要用pHead节点直接操作,否则操作结束这个链表就无法获取了。
void PrintList(ListNode* pHead){
    cout << "print list begin ---" <<endl;
    ListNode * pNode = pHead;
    while(pNode != NULL){
        cout << pNode->m_nValue<< endl;
        pNode = pNode->m_pNext;

        if(pNode == pHead){
            break;
        }

    }
    cout << "print list end " <<endl;
}

//销毁链表
void DestoryList(ListNode* pHead){
    ListNode* pNode = pHead;

    while(pNode != NULL){
        pHead = pHead->m_pNext;
        delete pNode;
        pNode = pHead;
    }
}

//从尾部添加节点,其中的参数是指向指针的指针,因为这里的pHead值是可能会变化的。
void AddToTail(ListNode** pHead, int value){
    ListNode* pNew = new ListNode();
    pNew->m_nValue = value;
    pNew->m_pNext = NULL;
//空链表,这时头指针就被改变了,确切说是头指针指向的内容被改变了,也即是说这里需要指针指向的内容,所以用了指向指针的指针。
    if(*pHead == NULL){
        *pHead = pNew;
    }else{
        ListNode* pNode = *pHead;
        while(pNode != NULL){
            pNode = pNode->m_pNext;
        }    
        pNode->m_pNext = pNew;
    }
}

//删除节点
void RemoveNode(ListNode** pHead, int value){
    if(pHead == NULL || *pHead == NULL){
        return;
    }
    
    ListNode* pToBeDeleted = NULL;
    if((*pHead)->m_nValue == value){
        pToBeDeleted = *pHead;
        *pHead = (*pHead)->m_pNext;
    }else{
        ListNode* pNode = *pHead;
        while(pNode->m_pNext !=NULL && pNode->m_pNext->m_nValue !=value){
            pNode = pNode->m_pNext;
        }
        if(pNode->m_pNext !=NULL && pNode->m_pNext->m_nValue == value){
            pToBeDeleted = pNode->m_pNext;
            pNode->m_pNext = pNode->m_pNext->m_pNext;
        }
    }
    if(pToBeDeleted != NULL){
        delete pToBeDeleted;
        pToBeDeleted = NULL;
    }
}

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

c语言实现链表及其基本操作

链表:        链表是一种物理储存单元上非连续、非顺序的储存结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。...
  • MBuger
  • MBuger
  • 2016-09-13 18:18
  • 7432

数据结构实验报告单链表的基本操作

错误1 public void add(int idx,AnyType x){ Node newNode=new Node(x); if(headNode==null||idx==0){ newNod...
  • moonlululu
  • moonlululu
  • 2016-02-15 16:57
  • 1463

4-6 带头结点的链式表操作集

4-6 带头结点的链式表操作集 (20分) 本题要求实现带头结点的链式表操作集。
  • Changxing898
  • Changxing898
  • 2016-08-26 07:25
  • 1576

二叉链表的定义与基本操作实现函数

#include #include typedef int TElemtype; typedef struct BiTNode{ TElemtype data; struct BiTNode ...
  • zj19941201
  • zj19941201
  • 2017-06-01 17:08
  • 285

数据结构基础(8) --单链表的设计与实现(1)之基本操作

链表简介 数组的缺点:      1.元素插入:除了在数组的末尾插入元素之外,在数组的其他任何位置插入元素都需要进行数组元素的频繁移动(插入位置之后的元素都需往后移动), 时间复杂度约为O...
  • acpchenpeng
  • acpchenpeng
  • 2016-01-28 15:18
  • 428

C语言实现单链表——之基本操作1

一般面试题中会考虑无头节点的单链表下面是一些实现: 声明Sqlist.h文件#pragma once #include #include typedef int Datatype; typede...
  • cherry_ermao
  • cherry_ermao
  • 2016-03-22 13:01
  • 261

数据结构基础(8) --单链表的设计与实现(1)之基本操作

链表简介 数组的缺点:      1.元素插入:除了在数组的末尾插入元素之外,在数组的其他任何位置插入元素都需要进行数组元素的频繁移动(插入位置之后的元素都需往后移动), 时间复杂度约为O(N);...
  • LFhappypain
  • LFhappypain
  • 2015-08-06 15:17
  • 492

实现无头结点单链表的基本操作函数

基于单链表经常见的面试题——基础篇 基于单链表的面试题——进阶篇什么是无头结点链表??? singlelinkedlist.h头文件#ifndef __SINGLELINKEDLIST_H__ ...
  • Quinn0918
  • Quinn0918
  • 2017-06-09 17:29
  • 996

循环链表的基本操作与实现

  • 2009-06-11 17:30
  • 3KB
  • 下载

使用C++链表实现二叉树的存储及基本操作

  • 2016-10-06 22:50
  • 2KB
  • 下载
    个人资料
    • 访问:35409次
    • 积分:1672
    • 等级:
    • 排名:千里之外
    • 原创:129篇
    • 转载:38篇
    • 译文:0篇
    • 评论:9条
    最新评论