单链表

来源:互联网 发布:线路设计软件 编辑:程序博客网 时间:2024/06/05 07:15
/**头结点:如果没有头结点那么插入和删除就会多一种情况要处理。*/#include<iostream>using namespace std;struct node {int data;node *link;};//声明单链表头结点node *first;/**单链表的查找:查找第k个结点(可包括头结点,为第0个)*/node *find(node *first,int k) {if(!first||k<0) {return NULL;}node *temp=first;int i=0;while(temp&&i<k) {temp=temp->link;i++;}if(temp&&i==k) {return temp;}return NULL;}/**插入到第k个结点位置(k>=1)*/bool insert(node *first,int k,int data) {if(k<1) {return false;}node *node_k=find(first,k-1);if(!node_k) {return false;}node *newnode=new node();newnode->data=data;node *node_k_next=node_k->link;node_k->link=newnode;newnode->link=node_k_next;return true;}/**删除第k个结点*/bool del(node *first,int k) {node *node_temp=find(first,k);if(!node_temp){return false;}node *node_k_pre=find(first,k-1);if(!node_k_pre) {return false;}node *node_k=node_k_pre->link;if(!node_k->link) {delete node_k;//注意这里释放了node_k,node_k_pre=NULL,否则成野指针 node_k_pre->link=NULL;return true;}node *node_k_next=node_k->link;node_k_pre->link=node_k_next;delete node_k;return true;}int main() {first=new node();bool i1=insert(first,1,1);bool i2=insert(first,1,2);bool i3=insert(first,4,3);for(int i=1; i<=3; i++) {node *temp=find(first,i);if(temp) {printf("data%d=%d\n",i,temp->data);}}printf(".......................................");del(first,1);del(first,1);del(first,1);for(int i=1; i<=3; i++) {node *temp=find(first,i);if(temp) {printf("data%d=%d\n",i,temp->data);}}return 0;}

原创粉丝点击