删除一个无头单链表的非尾节点
2016-04-28 21:23
519 查看
#define _CRT_SECURE_NO_WARNINGS 1 //删除一个无头单链表的非尾节点 #include<iostream> #include<stdlib.h> using namespace std; typedef int DataType; typedef struct SListNode { DataType data; //数据 struct SListNode* next; //指向下一个结点的指针 }SListNode; SListNode* CreateNode(DataType x) //创造结点 { //1.先开辟空间 2.数据赋给data 3.指针置空 SListNode* NewNode = (SListNode*)malloc(sizeof(SListNode)); NewNode->data = x; NewNode->next = NULL; return NewNode; } void PushBack(SListNode* &ppHead, int Data) { //1.none 2.one and more if (ppHead == NULL) { ppHead = CreateNode(Data); } else { //1.先找到尾结点 2.把新节点链起来 SListNode* cur = ppHead; while (cur->next) { cur = cur->next; } cur->next = CreateNode(Data); } } //删除一个无头单链表的非尾节点 void DelNoHeadNotTail(SListNode* &ppHead , int pos) { if (ppHead == NULL) //边界条件检查 return; else { SListNode* prev = ppHead; //prev指向要删除结点的前一个结点 SListNode* cur = prev->next; //cur指向要删除节点 while (cur->data!= pos) { cur = cur->next; prev = prev->next; } prev->next = cur->next; free(cur); cur->next = NULL; } } void PrintSNodeList(SListNode*&ppHead) { while (ppHead) { printf("%d->", ppHead->data); ppHead = ppHead->next; } cout << "NULL"; printf("\n"); } void Test() { SListNode* pHead = NULL; PushBack(pHead, 1); PushBack(pHead, 2); PushBack(pHead, 3); PushBack(pHead, 4); PushBack(pHead, 5); DelNoHeadNotTail(pHead, 2); PrintSNodeList(pHead); } int main() { Test(); system("pause"); return 0; }
相关文章推荐
- Qt之校验器
- XDU-1035 数独 (模拟)
- iOS开发总结之 view的frame、center和和view的bounds之间的区别
- NOIP201402比例化简
- 第九周 技术博客发表 网页设计打地鼠游戏
- 【笔试/面试】—— Linux 查看 cpu 和内存使用情况
- hdu 5671 Matrix(BC——思维题)
- ldpack工作日记-2016/4/28
- Android5.0/6.0新特性
- 用MFC 写高斯(gauss)列主元消去法和doolittle三角分解法
- JavaSE入门学习33:Java集合框架概述
- Java多线程编程-生产者,消费者
- hbase表结构以及操作
- 转: android 实现效果特效
- 解读vmstat中的ACTIVE/INACTIVE MEMORY
- bzoj3551
- 页面的CSS属性
- 【感悟】寻找生命的意义
- 计算日期天数差值
- Java基础