正逆位序单链表的建立——C语言

数据结构期末考试考了这个大题,我认为比较容易混淆,所以把自己的理解分享给大家,如有错误,感谢大家纠正。

逆序单链表的建立

链表节点的连接方式如图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其建立结点间连接的方式类似与向链表中插入元素,只不过插入元素的位置永远在头节点与第一个节点之间。

正序单链表的建立

链表节点的连接方式如图:
在这里插入图片描述
加创建的头节点外,另创建两个新节点
在这里插入图片描述
将p节点位置与head位置相同,从p节点开始延申链表,但仍保留初单链表head的位置,以便之后遍历。
在这里插入图片描述
连接一个节点后,将p位置赋为所增加q结点的位置,在将更新q节点
在这里插入图片描述
进行进一步连接,如此往复,正序单链表的连接就完毕了。
完整代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef int ElemType;

typedef struct LNode {
	ElemType data;
	struct LNode *next;
} LNode,*LinkList;

void CreateList(LinkList &head,int n);   //逆位序
void CreateList2(LinkList &head,int n);   //正位序
void TraveList(LinkList &head);         //链表的遍历

void CreateList(LinkList &head,int n) {
	int i;
	LinkList p;
	head=(LinkList)malloc(sizeof(LNode));
	head->next=NULL;
	printf("请输入%d个数值\n",n);
	for(i=1; i<=n; i++) {
		p=(LinkList)malloc(sizeof(LNode));
		scanf("%d",&p->data);
		p->next=head->next;
		head->next=p;
	}
}
void CreateList2(LinkList &head,int n) {
	int i;
	LinkList p,q;
	head=(LinkList)malloc(sizeof(LNode));
	head->next=NULL;
	p=q=(LinkList)malloc(sizeof(LNode));
	p=head;
	printf("请输入%d个数值\n",n);
	for(i=1; i<=n; i++) {
		scanf("%d",&q->data);
		p->next=q;
		p=q;
		q=(LinkList)malloc(sizeof(LNode));
	}
	p->next=NULL;
}
void TraveList(LinkList &head) {
	LinkList p=head->next;
	while(p) {
		printf("%2d",p->data);
		p=p->next;
	}
	printf("\n");
}
int main() {
	LinkList head,head2;
	int n,n2;
	
	
	printf("请输入逆序输入的单链表中元素的数量:");
	scanf("%d",&n);
	CreateList(head,n);
	printf("逆序输入的元素为:");
	TraveList(head);
	
	
	printf("\n请输入正序输入的单链表中元素的数量:");
	scanf("%d",&n2);
	CreateList2(head2,n2);
	printf("正序输入的元素为:");
	TraveList(head2);

	return 0;


}

head即为单链表的头节点。

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值