链表-其他基本操作
Posted wanjinliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表-其他基本操作相关的知识,希望对你有一定的参考价值。
单向链表的以下操作:
创建
输出
求表长
查找值
插入值
删除节点
代码:
#include <iostream> #include <string> #include <cmath> #include <algorithm> using namespace std; /* 创建 输出 求表长 查找值 追加值(节点) 删除节点 */ //节点结构体 struct Node int v; Node *next; ; //创建链表 Node* create_lian(int n) Node *a=new Node,*b; b=a; cin>>a->v; a->next=NULL; for(int i=2;i<=n;i++) a->next=new Node; a=a->next; cin>>a->v; a->next=NULL; cout<<"Node created."<<endl; return b; //输出链表 void out_lian(Node *p) do cout<<p->v<<endl; p=p->next; while(p!=NULL); //求表长 int lian_len(Node *p) int c=0; while(p!=NULL) c++; p=p->next; return c; //查找值所在的位置 int lian_search(Node *x,int y) int p=0; while(x!=NULL) p++; if(x->v==y) return p; x=x->next; return p; //追加值(节点) void lian_append(Node *x,int y) //准备待追加的节点 Node t; t.v=y; t.next=NULL; //找到链表的结尾节点 while(x->next!=NULL) x=x->next; //追加 x->next=&t; //删除值(节点)因为可能第一个点就是要删除的值,必须返回新链表的首地址。 Node* lian_del(Node *x,int y) Node *head=x,*pre; //处理要删除的元素(连续)打头的情况 while(x->v==y&&x!=NULL) head=x->next; free(x); x=head; pre=head; x=head->next; while(x!=NULL) if(x->v==y) pre->next=x->next; free(x); x=pre->next; else pre=x; x=x->next; return head; main() int n,x; Node *head; cin>>n; head=create_lian(n); /*//显示节点数 cout<<lian_len(head)<<endl; //查找x所在的位置 cin>>x; cout<<lian_search(head,x); //在链表结尾追加值(节点) cin>>x; lian_append(head,x);*/ //从链表中删除值 cin>>x; head=lian_del(head,x); out_lian(head);
end here
以上是关于链表-其他基本操作的主要内容,如果未能解决你的问题,请参考以下文章