c++链表问题求助
问题一:编写一个算法判断链表中的数据项是否按从小到大排序,该链表的第一个节点由first指向。问题二:对于给定的整数n,编写一个算法把新节点插入到链表中第n个节点之后的位...
问题一:编写一个算法判断链表中的数据项是否按从小到大排序,该链表的第一个节点由first指向。
问题二:对于给定的整数n,编写一个算法把新节点插入到链表中第n个节点之后的位置,该链表的第一个节点由first指向。
问题三:编写一个算法来颠倒一个链表,该链表的第一个节点由first指向。不要复制列表元素,而是重置链接和指针,是的first指向原来的最后一个借点,且节点之间的所有链接都反向。
我的代码:
#include<stdlib.h>
#include <stdio.h>
#define COUNT 5 //初始5个结点的链表
struct node{
int num;
node *next;
};
node *creat(); //创建新链表(5个结点)
void print(node *); //遍历链表
node *add(node *); //添加\插入一个结点
int isSort(node *); //判断其数据项是否按从小到大排列
node *reverse(node *); //反转链表
void main()
{
node *head;
head = creat();
print(head);
head = add(head);
print(head);
head = reverse(head);
print(head);
if(0==isSort(head))printf("不是按从小到大排序\n");
else printf("是按从小到大排序\n");
}
node *creat()
{
node *p1,*p2,*head;
head=NULL;
p1=p2 = (node *)malloc(sizeof(node));
p1->num = 1; //头结点
head =p1; 展开
问题二:对于给定的整数n,编写一个算法把新节点插入到链表中第n个节点之后的位置,该链表的第一个节点由first指向。
问题三:编写一个算法来颠倒一个链表,该链表的第一个节点由first指向。不要复制列表元素,而是重置链接和指针,是的first指向原来的最后一个借点,且节点之间的所有链接都反向。
我的代码:
#include<stdlib.h>
#include <stdio.h>
#define COUNT 5 //初始5个结点的链表
struct node{
int num;
node *next;
};
node *creat(); //创建新链表(5个结点)
void print(node *); //遍历链表
node *add(node *); //添加\插入一个结点
int isSort(node *); //判断其数据项是否按从小到大排列
node *reverse(node *); //反转链表
void main()
{
node *head;
head = creat();
print(head);
head = add(head);
print(head);
head = reverse(head);
print(head);
if(0==isSort(head))printf("不是按从小到大排序\n");
else printf("是按从小到大排序\n");
}
node *creat()
{
node *p1,*p2,*head;
head=NULL;
p1=p2 = (node *)malloc(sizeof(node));
p1->num = 1; //头结点
head =p1; 展开
1个回答
展开全部
#include<stdlib.h>
#include <stdio.h>
#define COUNT 5 //初始5个结点的链表
struct node{
int num;
node *next;
};
node *creat(); //创建新链表(5个结点)
void print(node *); //遍历链表
node *add(node *,int); //添加\插入一个结点
int isSort(node *); //判断其数据项是否按从小到大排列
node *reverse(node *); //反转链表
void main()
{
int n;
node *head;
head = creat();
print(head);
printf("请输入整数n:");
scanf("%d",&n);
head = add(head,n);
print(head);
head = reverse(head);
print(head);
if(0==isSort(head))
printf("不是按从小到大排序\n");
else
printf("是按从小到大排序\n");
}
node *creat()
{
node *p1,*p2,*head;
head=NULL;
p1=(node *)malloc(sizeof(node));
p1->num = 1; //头结点
head =p1;
p2=p1;
p1->next=NULL;
for(int i=2;i<COUNT+1;i++) //5个数据初始为1 2 3 4 5
{
p1=(node *)malloc(sizeof(node));
p1->num=i;
p2->next=p1;
p1->next=NULL;
p2=p1;
}
return head;
}
void print(node* first)
{
for(node* tmp=first;tmp;tmp=tmp->next)
printf("%d ",tmp->num);
puts("\n");
}
node* add(node* first,int n)
{
int i=0;
for(node* tmp=first;tmp;tmp=tmp->next)
{
i++;
if(i==n)
{
node* newnode;
newnode=(node*)malloc(sizeof(node));
newnode->num=n; //新节点值为n,插在第n个节点后
newnode->next=tmp->next;
tmp->next=newnode;
}
}
return first;
}
int isSort(node *first)
{
for(node* tmp=first;tmp->next;tmp=tmp->next)
{
if(tmp->num>tmp->next->num)
return 0;
}
return 1;
}
node *reverse(node *first)
{
node *p1,*p2,*p3;
p2=first;
p3=first->next;
do{
p1=p2;
p2=p3;
p3=p2->next;
p2->next=p1;
}
while(p3!=NULL);
first->next=NULL;
return p2;
}
满意请采纳哦!不满意可以修改!有问题可以问,谢谢!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询