题目:
/查找数据结点的位置,返回该指向结点的指针//如果不存在该数据元素,则返回 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;
}