数据结构与算法 PTA 8-1【链表】(C语言)

题目:

/查找数据结点的位置,返回该指向结点的指针//如果不存在该数据元素,则返回 NULL
Node * ListPosition(LinkList* list, ElemType value);
//查找数据元素old_value并修改为new_value// 如果修改成功则返回0,否则返回-1。
int ListModify(LinkList * list, ElemType old_value,ElemType new_value);
/ 删除数据元素value
'/ 如果删除成功则返回0,否则返回-1。
int ListDelete(LinkList* list, ElemType value);//链表反转
void ReverseList(LinkList* 1ist);

 

 解答:

功能实现:

 

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

typedef int ElemType;

typedef struct node{
	ElemType data;
	struct node *next;
}LinkList;

LinkList *LinkList_creat(){
	LinkList *List = (LinkList *)malloc(sizeof(LinkList));
	List->next = NULL;
	return List;
}


LinkList* Insert(LinkList *List, ElemType value,int pos){ 
	int i = 0;
	LinkList *temp = (LinkList *)malloc(sizeof(LinkList));
    temp->data = value;
    while(i<pos && List->next != NULL){
        List = List->next;
        i++;
    }
    temp->next = List->next;
    List->next = temp;
    
    return 0;
}

    

      
LinkList* ListPosition(LinkList *List, ElemType value){
	while(List->next != NULL){
		if(List->next->data == value){
			return List->next;
		}
		else{
			List = List->next;
		}
	}
	return NULL;
	
} 

int ListModify(LinkList*List, ElemType old_value,ElemType new_value){
		while(List->next != NULL){
		if(List->next->data == old_value){
			List->next->data == new_value;
			return 0;
		}
		else{
				List = List->next;
			}
		}
		return -1;
}

int ListDelete(LinkList*List, ElemType value){
	LinkList *t = NULL;
	while(List->next != NULL){
		if (List->next->data == value){
			t = List->next;
			value = t->data;
			List->next = t->next;
			free(t);
			t = NULL;
		return 0;
	}else{
		List  = List->next;
	}}

	return -1;
}

void ReverseLink(LinkList *List){
	LinkList *q = NULL;
	LinkList *p = List->next;
	List->next = NULL;
	while(p != NULL){
		q = p;
		p = p->next;
		q->next = List->next;
		List->next = q;
	}
}

mian函数: 

int main(){
	LinkList *List;
	List = LinkList_creat();
	//插入节点
	Insert(List, 5, 0); 
	Insert(List, 15, 1);
	Insert(List, 25, 2);
	
	int value = 15;
    LinkList *position = ListPosition(List, value);
    if(position != NULL){
        printf("值为%d的节点位置:%p\n", value, position);
    }
    else{
        printf("值为%d的节点不存在\n", value);
    }
	
	
	 // 修改节点值
    int old_value = 15;
    int new_value = 10;
    int modifyResult = ListModify(List, old_value, new_value);
    if(modifyResult == 0){
        printf("节点值修改成功\n");
    }
    else{
        printf("节点值修改失败\n");
    }
	
	    // 删除节点
    int deleteValue = 10;
    int deleteResult = ListDelete(List, deleteValue);
    if(deleteResult == 0){
        printf("节点删除成功\n");
    }
    else{
        printf("节点删除失败\n");
    }
    
    // 反转链表
    ReverseLink(List);
    
    printf("反转后的链表:");
    while(List->next != NULL){
        printf("%d ", List->next->data);
        List = List->next;
    }
    printf("\n");
	
	
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值