单链表 头插 尾插 遍历 删除

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct node
{
int data;
struct node *pNext;
};

void insertTail(struct node *pH,struct node *new)
{
struct node *p=pH;
int counter=0;

while(NULL != p->pNext)
{
p=p->pNext;
counter++;
}

p->pNext=new;
pH->data=counter+1;
}

void insertHeader(struct node *pH,struct node *new)
{
new->pNext=pH->pNext;
pH->pNext=new;
pH->data=+1;
}

void traversal(struct node *pH)
{
struct node *p=pH;

while(NULL != p->pNext)
{
p=p->pNext;
printf("data : %d \n",p->data);

}
}

void deleteNode(struct node *pH,int data)
{
struct node *p=pH;
struct node *tmp;

while(NULL != p->pNext)
{
tmp=p;
p=p->pNext;
printf("data : %d \n",p->data);
if(p->data == data)
{
if(NULL == p->pNext)
{
tmp->pNext=NULL;
free(p);
}
else
{
tmp->pNext=p->pNext;
free(p);
}
pH->data--;
}

}
}

struct node *createNode(int data)
{
struct node *p = (struct node *)malloc(sizeof(struct node));
if(NULL == p)
{
printf("malloc error ! \n");
return NULL;
}

memset(p,‘\0‘,sizeof(struct node));

p->data=data;
p->pNext=NULL;

return p;
}

int main()
{
struct node *pHeader;
struct node *p,*p1,*p2;

pHeader=createNode(0);

insertHeader(pHeader,createNode(8));
insertTail(pHeader,createNode(1));
insertTail(pHeader,createNode(2));
insertTail(pHeader,createNode(3));
insertTail(pHeader,createNode(4));

deleteNode(pHeader,4);
deleteNode(pHeader,8);

printf("counter %d \n",pHeader->data);

traversal(pHeader);

printf("data %d \n",pHeader->pNext->data);
printf("hello world ! \n");
return 0;
}

原文地址:https://www.cnblogs.com/zhangjianrong/p/11625430.html

时间: 2024-10-13 00:51:29

单链表 头插 尾插 遍历 删除的相关文章

单链表 头插 尾插 遍历

#include <stdio.h>#include <stdlib.h>#include <string.h> struct node{ int data; struct node *pNext;}; void insertTail(struct node *pH,struct node *new){ struct node *p=pH; int counter=0; while(NULL != p->pNext) { p=p->pNext; counte

线性表的链式存储之单链表的尾插法

对单链表进行遍历.查找.插入.删除等操作,最终效果如下: 相关C代码如下: /*线性表的链式存储之单链表的尾插法*/ #include <stdio.h> #include <stdlib.h> #include <malloc.h> /*定义变量*/ typedef int DataType; typedef struct node{     //定义链表结点数据结构 DataType data; struct node * pNext; }NODE; typedef

单链表的尾插,头插,遍历,查找和插入

单链表的基本结构 function Node(val,next){ this.val = val; this.next = next || null; } 1.链表的创建 a.尾插法,就是正常的尾部顺序插入,从数组创建链表 function tailCreateList(aSrc){ var head = new Node(); pHead = head; aSrc.forEach((item) => { var node = new Node(item); pHead.next = node;

【C++】用类实现单向单链表的尾插PushBack(),尾删PopBack(),打印PrintSlist()。

建立源文件,命名为:Slist.cpp. #include"Slist.h" int main() {     Test();     system("pause");     return 0; } 建立头文件,命名为:Slist.h. #ifndef __SLISH_H__ #define __SLIST_H__ #include<iostream> using namespace std; typedef int DataType; class S

单链表的头插、尾插、删除、合并等操作

单链表的头插.尾插.删除.合并等操作实现代码如下: #include<iostream> using namespace std; //单链表的存储结构 typedef struct Node { int data; struct Node* next; }Node,*LinkList;//LinkList为结构指针类型 //初始化单链表 void InitList(LinkList *L) { *L = (LinkList)malloc(sizeof(Node));//建立头结点 (*L)-

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

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

单链表的逆向打印、删除无头的非尾节点、无头链表插入节点、约瑟环

//1.逆向打印链表(递归) void PrintTailToHead(ListNode *pHead) {                 ListNode *cur = pHead;                  if(cur != NULL)                 {                                 PrintTailToHead(cur->_next);                                 printf( "

单链表节点的添加和删除

单链表的节点定义 struct ListNode { int m_nValue; ListNode* m_pNext; }; 在单链表的末尾添加结点 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*

单链表头插,尾插

#include <stdio.h>#include <stdlib.h>#include <string.h> struct node{ int data; struct node *pNext;}; void insertTail(struct node *pH,struct node *new){ struct node *p=pH; int counter=0; while(NULL != p->pNext) { p=p->pNext; counte