การสลับค่าข้อมูลใน linked list

ผมเขียนโปรแกรมสลับค่าใน linked list
เช่นผมต้องการสลับค่า 5 กับ  10
แต่ผมได้ผลลัพธ์ 10  5  10
จากผลลัพธ์เหมือนกับว่าผมไม่ได้คืนค่าหน่วยความจำให้กับระบบ(free) ผมต้องแก้ไขโค้ดอย่างไรหรือที่หยุดไหนครับ
ตัวแปร โครงสร้าง
struct node
{
    int energy;
    struct node *link;
};
ฟังก์ชั่นสลับค่า
void swop()
{
                            struct node *walknode ;
                             walknode=start;// walknode start at begin

                struct node *newtemp;
                newtemp=(node*)malloc(sizeof(struct node)); //create new memory
                newtemp->energy=walknode->energy; //assign data to newtemp
                printf("data = %d\n",newtemp->energy);
                newtemp->link=start;//assign data to newtemp
                start=newtemp;                        
}
ฟังก์ชั่นปริ้น
void print()
{
    struct node *temp;
    temp=start;
        while(temp!=NULL){
        printf("%d ",temp->energy);
        temp=temp->link;
    }
    printf("\n");
}
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่