链表中查找X并将哪个节点删除,将最大字母排列到链表尾部(c++语言)
发布网友
发布时间:2022-05-16 02:12
我来回答
共1个回答
热心网友
时间:2023-10-09 02:29
一个仅由字母组成的字符串s,长度为n,其结构为单链表,每个结点的data字段只存放一个字母。试设计一个函数,去掉字符串中所有的X字母,并将串中的一个最小字母排列到串尾。
【算法分析】
从链表的表头开始查找每一个结点,如果该结点的数据值为X,则删除该结点。同时在查找的过程中,顺便比较该结点与前驱结点的大小,如果该结点的值闭其前驱结点的值大,则顺便交换,直到整个链表结束。
【算法源代码】
search(LinkList s,char x)
/*在带头结点的单链表s中查找数据值为x的结点*/
{
LinkList p,q,r;
char temp;
p=s->next;
q=s;/*p表示当前操作的结点,q表示p的前驱结点*/
while(p!=NULL)
{if(p->data==x)
{r=p;
q-next=p->next;
p=p->next;
free(r);
} /*找到释放结点*/
else
{q=p; p=p->next; }
if(q!=s&&p->data>q->data) /*将结点值最小的结点移到表尾*/
{
temp=p->data;
p->data=q->data;
q->data=temp;
}
}
}