LinkedList的要素交换问题在C

我写的有很多功能的程序,但我不能在交换链接的list.Actually 2个节点的2个元素我可以通过改变他们的链接交换2个节点但是当用户请求的2个元素swapping.Here是我不能换2元我没有任何交换operation.Again我必须说,我想通过交换节点2的元素不改变节点links.How我可以摆脱这个问题要做到这一点交换操作的代码吗?任何帮助将不胜感激。

#include <stdio.h> #include <stdlib.h> struct node{ int data; struct node *next; }; typedef struct node nodetype; void insert(int ,struct node **); void display(struct node *); void search(int, struct node *); void delete(int, struct node **); int main(void){ nodetype *p; p=NULL; int x=0,choice; int s_no,k,r_no; while(x!=1){ printf("enter 1 for insert\n"); printf("enter 2 for display\n"); printf("enter 3 for search\n"); printf("enter 4 for delete\n"); printf("enter 0 for exit\n"); fflush(stdout); scanf("%d",&choice); if(choice==1){ printf("enter inserted no\n"); fflush(stdout); scanf("%d",&k); insert(k,&p); } else if(choice==2) display(p); else if(choice==3){ printf("enter searched no\n"); scanf("%d",&s_no); search(s_no, p); } else if(choice==4){ printf("enter deleted no\n"); scanf("%d",&r_no); delete(r_no,&p); } else printf("invalid choice\n"); } return 0; } void display ( struct node *p) { printf("the content is:\n"); if(p==NULL) printf("the link is empty\n"); while ( p != NULL ) { printf ( "%d ", p -> data ) ; p = p -> next ; } printf ( "\n" ) ; } void search(int no, struct node *p){ nodetype * loc; for(loc=p;loc!=NULL;loc=loc->next) { if(no==loc->data){ printf("\nthe number exist in the list\n"); return; } } printf("\nthe number is not exist in the \n"); } void insert(int x,struct node **p) { struct node *r,*temp=*p; r = (struct node *)malloc ( sizeof (struct node)) ; r ->data = x ; r->next=NULL; if ( *p == NULL) { *p = r ; } else { while(temp->next!= NULL) { temp=temp->next; } temp->next=r; } } void delete(int num, struct node **p){ struct node *temp,*x; temp=*p; x= NULL; while (temp->next !=NULL){ if(temp->data == num) { if (x==NULL) { *p = temp->next; free(temp); return; } else { x->next = temp->next; free(temp); return; } } x=temp; temp=temp->next; } printf(" No such entry to delete "); }

--------------解决方案-------------

我试图用用户交换操作进入numbers.For例如,用户要想在linkedlist.How我能做到这一点交换进入12和45?

我建议你​​用返回值扩展现有的功能,(未测试只是想法)

nodetype * search(int no, struct node *p){
nodetype * loc;
for(loc=p;loc!=NULL;loc=loc->next)
{
if(no==loc->data){
printf("\nthe number exist in the list\n");
return loc;
}

}
printf("\nthe number is not exist in the \n");
return NULL;
}

之后调用搜索由用户输入的两个值。 然后你交换价值的地方在不改变任何指针引用简单地分配新值。 当然,你需要检查是否节点实际上发现(NOT NULL)。

nodetype *node1;
nodetype *node2;

node1 = search( userInput1, &p );
node2 = search( userInput2, &p );

int tmp_data = node1->data;
node1->data = node2->data;
node2->data = tmp;

分类:C# 时间:2015-03-15 人气:0
本文关键词: C#中,链表,交换
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.330 (s). 10 q(s)