|
|
รบกวน ดูโค้ดและ อธิบาย สอน ตัวอย่างนี้ที่ครับว่าผิดยังไง บ้าง |
|
|
|
|
|
|
|
จากโจทร์
ตัวอย่างการป้อนข้อมูล เข้า ละ แสดง เอาต์พุต
โค้ด ที่ ผม ทำจะอยู่ในช่วงของ //......// ครับ
Code (C#)
#include <stdio.h>
struct node {
int data;
struct node *next;
struct node *back;
};
void AddNode(struct node **walk);
////////////////////////
void SwapNode2(struct node **begin,struct node *walk1,struct node *walk2); //<<<<---- วิธีประกาศ เราสามารถรู้ได้อย่างไรว่าต้องประกาศอะไร
////////////////////////
int main()
{
int i,n,g1,g2,value;
struct node *start,*now,*now2;
start=NULL;
scanf("%d",&n); //how many nodes?
for(i=0; i<n; i++)
AddNode(&start);
scanf("%d %d",&g1,&g2); //go to node?
while(g1>=0 && g1<n && g2>=0 && g2<n) {
now=start;
for(i=0; i<g1 && now!=NULL; i++)
now=now->next;
now2=start;
for(i=0; i<g2 && now2!=NULL; i++)
now2=now2->next;
SwapNode2(&start,now,now2);
now=start;
printf("Swap node %d,%d", g1, g2);
printf("\nList forward: ");
while(now!=NULL) { //show all from start node
printf("%d ",now->data);
if(now->next!=NULL) now=now->next;
else break; //go last node, ready to show backward
}
printf("\nList backward: ");
while(now!=NULL) { //show all from last node
printf("%d ",now->data);
now=now->back;
}
printf("\n");
scanf("%d %d",&g1,&g2); //go to node?
}
return 0;
}
void AddNode(struct node **walk)
{
struct node *temp;
temp=NULL;
while(*walk!=NULL) {
temp=*walk;
walk=&(*walk)->next;
}
*walk=new struct node;
scanf("%d",&(*walk)->data);
(*walk)->next=NULL;
(*walk)->back=temp;
}
////////////////////////
void SwapNode2(struct node **begin,struct node *walk1,struct node *walk2){
struct node *temp;
if((walk1)->back==NULL)
*begin = walk2;
else
walk1->back->next = walk2; //----(1)
if((walk2)->back==NULL)
*begin = walk1;
else
walk2->back->next = walk1; //----(2)
temp = walk1->next; //----(3)
walk1->next = walk2->next; //----(4)
walk2->next = temp; //----(5)
temp = walk2->next; //----(6)
walk2->back = walk1->back; //----(7)
walk1->back = temp; //----(8)
if((walk1)->next!=NULL){
walk1->next->back=walk1; //----(9)
}
if((walk2)->next!=NULL){
walk2->next->back=walk2; //----(10)
}
}
////////////////////////
Tag : C#, C
|
|
|
|
|
|
Date :
2013-09-04 18:05:43 |
By :
tormam |
View :
953 |
Reply :
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2013-09-05 06:33:46 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|