单向链表的创建、查找、删除、打印
来源:互联网 发布:mysql gtid主从区别 编辑:程序博客网 时间:2024/06/05 09:52
链表结点的定义:
struct ListNode{ int m_nKey; ListNode* m_pNext;};
1、单链表的创建
注意要创建头结点
ListNode *create(int *data,int len)//data[]输入的数组,len是输入数组长度{ListNode *head,*p,*q;//定义三个结点,首、中、尾//head=(ListNode*)malloc(sizeof(ListNode));head=new ListNode;//创建头节点int i;for(i=0;i<len;i++){//p=(ListNode*)malloc(sizeof(ListNode));p= new ListNode;//每次插入一个,就新建一个结点p->m_nKey=data[i];if(i==0){head->m_pNext=p;//头结点}else{q->m_pNext=p;}q=p;}q->m_pNext=NULL;//链表最后一个指针为NULLreturn head;}
2、链表打印
void print_ListNode(ListNode *head) { ListNode *p; if(head->m_pNext==NULL) { cout<<"链表为空"<<endl;return; } p=head->m_pNext; while(p!=NULL) { cout<<p->m_nKey<<" "; p=p->m_pNext; } cout<<endl;}
3、链表结点的删除
要找到删除结点前一结点的位置。从表头开始遍历,发现结点p的m_pNext指向要删除的结点i,于是我们可以把结点p的m_pNext指向i的下一个结点。指针调整后,就可以安全地删除结点i并保证链表没有断开。
如下图所示:
要考虑:删除的结点是第一个结点;删除的结点不是第一个结点;
ListNode *delete_node(ListNode* pListHead, int k)//要删除k,需要找到k值前一个节点{if(pListHead==NULL)return NULL;ListNode *p1=NULL;ListNode *p2=NULL;p1=pListHead;if(p1->m_pNext->m_nKey==k)//删除的结点是第一个节点{p2=p1->m_pNext;pListHead->m_pNext=p2->m_pNext;delete p2;return pListHead;}else //删除的结点是第一个节点{while(p1->m_pNext!=NULL){if(p1->m_pNext->m_nKey==k){p2=p1->m_pNext;p1->m_pNext=p2->m_pNext;delete p2;}else{p1=p1->m_pNext;}}}return pListHead;}
主函数如下:
#include<stdio.h>#include<iostream>#include<vector>#include<map>#include<algorithm>using namespace std;struct ListNode{ int m_nKey; ListNode* m_pNext;};ListNode *create(int *data,int len);ListNode *FindKthToTail(ListNode* pListHead, int k);void print_ListNode(ListNode *head) ;int main() {int num,n;while(cin>>num){cout<<"输入"<<num<<"个整数:"<<endl;int *data=new int[num];for(int i=0;i<num;i++){cin>>data[i];}ListNode *head,*p;head=create(data,num);cout<<"创建的链表为:"<<endl;print_ListNode(head);cout<<"输入删除的结点:"<<endl;cin>>n;p=delete_node(head,n);cout<<"输入删除的结点后链表为:"<<endl;print_ListNode(p);} return 0;}
0 0
- 单向链表的创建、查找、删除、打印
- 单向链表的操作:创建,删除,插入,销毁,查找
- 单向链表的建立、打印、 删除
- 单向链表的创建与打印
- 实现单向循环链表的创建、测长、打印、插入、删除及逆置
- c++之链表篇1:单向链表的创建,打印,删除,插入,销毁等基本操作
- 单向链表的创建,插入,删除,排序,查找---新人贴
- 单向链表的创建 删除 插入
- 链表(二)——单向链表的基本操作(创建、删除、打印、结点个数统计)
- 两种方法实现单向链表的创建、遍历、删除、查找、逆序输出(循环法和递归法)
- 单向链表-查找和删除
- 带头节点链表的操作(链表的创建、删除、查找、逆转、打印等等)
- 单向动态链表的创建、输入、插入、删除、输出
- 单向动态链表的创建、输入、插入、删除、输出
- 单向循环链表的创建/插入/删除/输出算法
- 程序员面试100题(算法)之查找链表中倒数第k个节点(含单向链表的创建和打印)
- 单向链表的相关操作总结:创建、删除、查找、排序、统计链表大小、链表的反转和遍历等
- 单向链表的创建、遍历、求长、判存、判空、插入、删除、查找(按位置或元素)、合并
- Java使用HttpURLConnection上传文件
- 建议144:一个方法只做一件事
- 搭建SpringMVC4.3.2+MyBatis3.4.1框架
- 09/07号Java面向对象基础之二
- Hadoop技术内幕之MapReduce编程模型(上)
- 单向链表的创建、查找、删除、打印
- php写接口例子返回json和xml数据
- 自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法
- ScrollView和ViewPager嵌套使用(导致左右、上下滑动冲突解决方案)
- 从一道面试题来认识java类加载时机与过程
- Android基础学习【历史流程重走】 ----四大组件之BroadCastReceiver
- pat 乙 1011. A+B和C
- 建议145:避免过长的方法和过长的类
- mysql 客户端远程连接设置