编程c++完成一个带头结点的单链表建立,实现初始化、求表长、取元素、按值查找、单链表的插入、删除、遍历访问等基本操作。在此基础上,利用原链表结点空间实现逆转并输出结果。
例如: L->1->3->5->8->9. 逆转后结果为 L->9->8->5->3->1
void printheadlinklist()
{
linklist *p = head;
while (p != NULL)
{
printf("%d ", p->x);
if (p->next != NULL)
p->next->front = p;
if (p->next == NULL)
end = p;
p = p->next;
}
}
void printendlinklist()
{
linklist *p = end;
while (p != NULL)
{
printf("%d ", p->x);
p = p->front;
}
}
linklist *searchlink()
{
linklist *p;
int x;
printf("Please input a num you would search:\n");
scanf("%d", &x);
for (p = head; p != NULL; p = p->next)
{
if (x == p->x)
return p;
}
printf("no record!\n");
exit(0);
}
void deletelink(linklist * pos)
{
if (pos == head)
{
head = head->next;
head->front = NULL;
}
else if (pos == end)
{
end = end->front;
end->next = NULL;
}
else
{
pos->front->next = pos->next;
pos->next->front = pos->front;
}
free(pos);
pos = NULL;
printf("Delete ok!\n");
}
void insertlink(linklist * pos)
{
linklist *newlink;
newlink = (linklist *) malloc(length);
printf("Please input a num of new linknode:\n");
scanf("%d", &newlink->x);
if (pos == end)
{
end->next = newlink;
newlink->next = NULL;
newlink->front = pos;
end = newlink;
}
else
{
newlink->next = pos->next;
newlink->next->front = newlink;
newlink->front = pos;
pos->next = newlink;
}
printf("Insert ok!\n");
}
void sortlink()
{
linklist *endpt;
linklist *p;
linklist *p1, *p2;
p1 = (linklist *) malloc(length);
p1->next = head;
head = p1;
for (endpt = NULL; endpt != head; endpt = p)
{
for (p = p1 = head; p1->next->next != endpt; p1 = p1->next)
{
if (p1->next->x > p1->next->next->x)
{
p2 = p1->next->next;
p1->next->next = p2->next;
p2->next = p1->next;
p1->next = p2;
p = p1->next->next;
}
}
}
p1 = head;
head = head->next;
free(p1);
p1 = NULL;
head->front = NULL;
}
我写的链表中包括查找,删除,排序等基本算法
可以参考下
本回答被提问者和网友采纳