昨天写的CSDN不知道怎么了,记得已经发出去了,竟然没有发出去
针对带头节点的单链表,编写以下函数//默认为程序内的函数
其实我觉得用外部传入的更严谨,而且使用范围更广
结点类LinkNode
单链表类List
头结点first
下一指针域 link
数据域data
(1)定位函数 Locate:在单链表中遍历在单链表中寻找第i个结点,若找到,则函数返回第i个结点的地址,找不到返回NULL;
template
LinkNode
{
if(i<0)//条件判断
{
cout<<"请检查i的输入"< return NULL; } LinkNode int k=0; while(p->link!=NULL&&k
k++ p=p->link;//移动 } return p;//返回结点的地址,如果没有的话当然返回NULL } 2 求最大值函数max,通过一趟遍历在单链表中确定值最大的结点 template LinkNode { LinkNode LinkNode while(p->link!=NULL) { p=p->link; if(p->data>m->data)//在遍历中每次与最大的结点进行比较 { m=p;//记录下最大的结点 } } return m;//循环结束,m即为找到的最大值,返回即可 } (3)统计函数number:统计单链表中所有与给定值x相同的元素的个数 template int List { LinkNode *p=first->link;//从头节点开始 int k=0;//计数变量 while(p->link!=NULL) { p=p->link;//移动 if(p->data==x) k++;//统计元素加1 } return k;//返回元素个数 } (4)建立函数create;根据一维数组a[n]建立一个单链表,使得链表中各元素的次序与a[n]中各元素的次序相同要求该程序的时间复杂度为O(n).(外部传入) template LinkNode { if(n==0) return NULL;//条件判断 LinkNode LinkNode for(int i=0;i { p=p->link=new LinkNode } return first;//返回头节点 } 5 整理函数tidyup:在非递减的有序的单链表中删除值相同的多余结点 template LinkNode { if(L->next==NULL) return NULL;//空链表 LinNode LinkNode T same=p->data;//记录下当前的值 while(p->link!=NULL)//结束条件 { if(p->next->data==same)//找到就删除 { q=p->next;//保存 p->next==q->next;//移动 delete p; } else { p=p->next;//移动 same=p->data;//记录下当前的值 这句是关键 } } }