单链表处理

简介: 随便写了点,写得不好,遗忘的时候,回来看看: #include <iostream> using namespace std; typedef struct Node { int age; Node *pNext; }ListNode, *LinkList; //链表处理函数 LinkList CreateLinkList(); void A

随便写了点,写得不好,遗忘的时候,回来看看:

#include <iostream> using namespace std; typedef struct Node { int age; Node *pNext; }ListNode, *LinkList; //链表处理函数 LinkList CreateLinkList(); void Append(LinkList const head, int data); //添加(至末尾) void Insert(LinkList const head, int data, int pos); //插入 void Delete(LinkList const head, int pos); //删除 void Print(LinkList const head); //输出 void ClearLinkList(LinkList head); //清空 int main(int argc, char *arv[]) { LinkList head = NULL; //每次都从head开始输出 cout << "输出创建前的表:" << endl; Print(head); head = CreateLinkList(); //输出 cout << "输出创建后的表:" << endl; Print(head); //添加(至末尾) for (int i = 1; i < 4; ++i) { Append(head, i); } //输出 cout << "输出添加3个元素后的表:" << endl; Print(head); //插入 Insert(head, 12, 2); //输出 cout << "输出在2号元素后插入数据12的表:" << endl; Print(head); //删除 Delete(head, 2); //输出 cout << "输出将2号元素删除后的表:" << endl; Print(head); //清空 ClearLinkList(head); head = NULL; //输出 cout << "Clear表:" << endl; Print(head); getchar(); return 0; } LinkList CreateLinkList() { ListNode *p; p = new ListNode; p->age = 0; p->pNext = NULL; return p; } void Append(LinkList const head, int data) { if (!head) { ClearLinkList(head);//链表若为空,则创建 } ListNode *pNode = new ListNode; pNode->age = data; pNode->pNext = NULL; ListNode *pEnd = NULL; pEnd = head; while (pEnd->pNext)//找到末节点 { pEnd = pEnd->pNext; } pEnd->pNext = pNode; } void Insert(LinkList const head, int data, int pos) { ListNode *p = head; if (!head) { return;//链表为空 } else { while(p->age != pos - 1) { p = p->pNext; if (!p) { return;//到了链表末端 } } //插入 ListNode *pNode = new ListNode; pNode->age = data; pNode->pNext = p->pNext; p->pNext = pNode; } } void Delete(LinkList const head, int pos) { ListNode *p = head; if (!head) { return; } else { while(p->age != pos - 1) { p = p->pNext; if (!p) { return;//末端 } } //删除 ListNode *pNode = p->pNext; p->pNext = pNode->pNext; delete pNode; } } void Print(LinkList const head) { if (!head) { cout << "LinkList is Null!" << endl; } else { ListNode *p = head; do { cout << p->age << endl; p = p->pNext; } while (p); } } void ClearLinkList(LinkList head) { if (!head) { return; } ListNode *pNode = NULL; ListNode *pNodeNext = NULL; pNode = head; do { pNodeNext = pNode->pNext; delete pNode; pNode = pNodeNext; } while (pNode); head = NULL; }

相关文章
|
6月前
|
存储
【单链表】
【单链表】
35 0
|
1月前
|
存储 C语言
单链表详解
单链表详解
31 0
|
3月前
|
存储 缓存
详解单链表
详解单链表
37 0
详解单链表
|
4月前
单链表的实现
单链表的实现
|
10月前
|
存储
【链表】单链表的实现
【链表】单链表的实现
44 0
|
10月前
|
存储 编译器
【链表之单链表】
什么是链表 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 通俗地讲,就是一个结构体有两个成员,一个是存放数据的成员,一个是指针成员,通常的单链表是第一个节点的指针成员存着下一个节点的地址,下一个节点的指针成员又存下一个节点的地址,这样每个节点之间连接起来,就叫做链表。 本文主要讲的是链表中的一种重要的形式:单链表。
|
11月前
|
存储
单链表
单链表
|
存储 API 索引
链表——单链表
单向链表是链表的一种,它由多个结点组成,每个结点都由一个数据域和一个指针域组成,数据域用来存储数据,指针域用来指向其后继结点。链表的头结点的数据域不存储数据,指针域指向第一个真正存储数据的结点。
71 0
链表——单链表