数据结构--C语言--逆序建立单链表,遍历单链表,在单链表第5个元素前插入一个值为999的元素,删除单链表第5个元素

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define LEN sizeof(struct LNode)
struct LNode{
	int data;
	struct LNode *next;
};
typedef struct LNode LNode,* LinkList;

//初始化
LinkList InitLNode(void){
	LinkList head = (LinkList)malloc(LEN);
	if(!head){
		printf("存储空间分配失败!\n");
		exit(ERROR); 
	}
	head->data = 0;
	head->next = NULL;
	return head;
} 
//逆序创建单链表
int transCreat(LinkList head){
	LinkList pnew;
	pnew = (LinkList)malloc(LEN);
	printf("请依次输入数据(输入-1认为输入终止)\n");
	scanf("%d",&pnew->data);
	while(pnew->data!=-1){//先把后边的串上再串前边的 
		head->data++;
		pnew->next = head->next;//核心语句 
		head->next = pnew;      //核心语句 
		pnew = (LinkList)malloc(LEN);
		scanf("%d",&pnew->data);
	}
	free(pnew);//此时的pnew数据域里存放着-1 没有被链入到链表中 无用 
	return OK; 
}
//输出单链表
int printLNode(LinkList head){
	if(!head->next){
		printf("空链表!\n");
		return ERROR;
	}	
	LinkList p;
	p = head->next;
	do{
		printf("%d ",p->data);
		p = p->next	;
	}while(p);
}
//插入
int insertLNode(LinkList head,int num,int locate){
	if(locate<1||locate>head->data+1){
		printf("插入位置有误!\n");
		exit(ERROR);
	}
	LinkList pnew,p;
	int i=0;
	p = head;//p指向第0个结点 i也表示第0个结点 
	pnew = (LinkList)malloc(LEN);
	pnew->data = num;
	while(p&&i<locate-1){//p的位置停在所要插入位置的前一位 
		p = p->next;
		i++;//p往后移动 i作为一个位置游标就加1 
	}
	pnew->next = p->next;
	p->next = pnew;
	head->data++;
	return OK;
}
//删除 
int delLinkList(LinkList head,int locate){
	if(!head->next){
		printf("空链表!\n");
		exit(ERROR); 
	}
	if(locate<1||locate>head->data){
		printf("位置有误!\n");
		return ERROR; 
	}
	LinkList pleft,pright;
	int i = 0;
	pleft = pright = head;
	while(pright&&i<locate){
		pleft = pright;
		pright = pright->next;
		i++;//pright和i指的是同一个结点 
	}
	pleft->next = pright->next;
	head->data--; 
	free(pright);
	return OK; 
}

main(){
	LinkList head;
	head = InitLNode();
	transCreat(head);
	printLNode(head);
	printf("\n\n在单链表第5个元素前插入一个值为999的元素后结果是:\n"); 
	insertLNode(head,999,5);
	printLNode(head);
	printf("\n\n删除单链表第5个元素后结果是:\n");
	delLinkList(head,5);
	printLNode(head);
}

猜你喜欢

转载自blog.csdn.net/J_SUNV/article/details/84501117