题目:
将有序循环单链表rear中值为e元素修改值为new_e,使其仍有序
流程:
找到目标元素,修改值,并使得其左右数值有序即可
实现代码:
#include<iostream>
typedef int elem;
using namespace std;
typedef struct snode
{
elem rear;
struct snode* next;
}singlenode;//创建结构体
void initlist(singlenode*& L)
{
L = (singlenode*)malloc(sizeof(singlenode));
L->next = NULL;
}//初始化链表
void destorylist(singlenode*& L)
{
singlenode* s = L->next;
while (s != NULL)
{
free(s);
}
free(L);
}//销毁链表
void xiugai(singlenode*& L,elem e,elem new_e)
{
int sign = 0;
singlenode* m=L, * n=L->next;
singlenode* t;
t = (singlenode*)malloc(sizeof(singlenode));
while (n!= NULL)
{
if (n->rear == e)
{
n->rear = new_e;
m->next = n->next;
t = n;
t->next = NULL;
break;
}
m = n;
n = n->next;
}
singlenode* pp1, * pp;
pp1 = L;
pp = L->next;
while (pp != NULL)
{
if (pp->rear > new_e)
{
t->next = pp;
pp1->next = t;
break;
}
pp1 = pp;
pp = pp->next;
}
}
void display(singlenode* L)
{
singlenode* s = L->next;
while (s != NULL)
{
cout << s->rear << " ";
s = s->next;
}
}//输出链表的内容
int main()
{
singlenode* L1;
initlist(L1);
singlenode* s = L1;
singlenode* p;
for (int i = 1; i <= 20; i++)
{
p = (singlenode*)malloc(sizeof(singlenode));
s->next = p;
p->rear = i;
s = p;
p->next = NULL;
}
display(L1);
cout << "\n";
xiugai(L1, 3, 6);
display(L1);
destorylist(L1);
cout<<"\n";
return 0;
}