编程c++完成一个带头结点的单链表建立,实现初始化、求表长、取元素、按值查找、单链表的插入、删除、

编程c++完成一个带头结点的单链表建立,实现初始化、求表长、取元素、按值查找、单链表的插入、删除、遍历访问等基本操作。在此基础上,利用原链表结点空间实现逆转并输出结果。例... 编程c++完成一个带头结点的单链表建立,实现初始化、求表长、取元素、按值查找、单链表的插入、删除、遍历访问等基本操作。在此基础上,利用原链表结点空间实现逆转并输出结果。
例如: L->1->3->5->8->9. 逆转后结果为 L->9->8->5->3->1
展开
 我来答
喵不语__
推荐于2016-02-17 · TA获得超过2.5万个赞
知道大有可为答主
回答量:3281
采纳率:75%
帮助的人:645万
展开全部
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
// 尾插法
typedef struct node
{
int x;
struct node *front;
struct node *next;
} linklist;

linklist *head = NULL; // 表头
linklist *end = NULL; // 表尾

#define length sizeof(linklist)

void creatlink();
void printendlinklist();
void printheadlinklist();
linklist *searchlink();
void deletelink(linklist * pos);
void insertlink(linklist * pos);
void sortlink();

int main()
{
creatlink();
printheadlinklist();
putchar('\n');
printendlinklist();
return 0;
}

void creatlink()
{
linklist *current, *r;
int y;
current = (linklist *) malloc(length);
current->front = NULL;
printf("Please input nums and end with zero:\n");
scanf("%d", &y);
while (y)
{
current->x = y;
if (head == NULL)
head = current;
else
{
r->next = current;
current->front = r;
}
r = current;
current = (linklist *) malloc(length);
scanf("%d", &y);
}
end = r;
r->next = NULL;
}
更多追问追答
追答
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;
}
我写的链表中包括查找,删除,排序等基本算法
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式