私がしようとしているのは、単独リンクリストの最初と最後の要素を入れ替えることです。これまでのところ、私はリストを作成し、そこにいくつかの数字を追加する次のコードを持っています。私の問題は、swapElements1関数です。C - 単一リンクリストの最初と最後の要素を交換する
#include <stdio.h>
#include<stdlib.h>
struct node
{
int number;
struct node *next;
};
void addNodeSingle(struct node **head, int num, int thesi) //Function to insert new node at the beginning or the end of the list, depending on the value of "thesi"
{
if (*head == NULL)
{
struct node *current;
current = (struct node*) malloc (1*sizeof(struct node));
current -> number = num;
current -> next = NULL;
*head = current;
}
else
{
if (thesi == 0)
{
struct node *current;
current = (struct node*) malloc (1*sizeof(struct node));
current -> number = num;
current -> next = *head;
*head = current;
}
else
{
struct node *current, *temp;
current = (struct node*) malloc (1*sizeof(struct node));
current -> number = num;
temp = *head;
while (temp -> next != NULL)
temp = temp -> next;
temp -> next = current;
current -> next = NULL;
}
}
}
void displayList(struct node **head) //Function to display the list
{
struct node *current;
if(*head == NULL)
printf("I lista einai adeia!\n");
else
{
current= *head ;
while(current != NULL)
{
printf("%d ",current -> number);
current = current -> next;
}
}
}
void swapElements1(struct node **head) //(not working)Function to swap first and last element of the list
{
struct node *current, *temp;
current = temp = *head;
while(current != NULL)
{
temp = current;
current = current -> next;
}
*head = (*head)->next;
*head = temp;
current = NULL;
}
int main()
{
struct node *head;
head = NULL;
addNodeSingle(&head,5,1);
addNodeSingle(&head,6,1);
addNodeSingle(&head,2,0);
addNodeSingle(&head,7,0);
addNodeSingle(&head,8,0);
printf("List is: ");
displayList(&head);
swapElements1(&head);
printf("\nNew list is: ");
displayList(&head);
}
私が手出力は次のようになります。
一覧は以下のとおりです。8 7 2 5 6
新しいリストがある:6
iが必要なもの:
一覧は以下のとおりです。 8 7 2 5 6
新しいリストは:6 7 2 5 8
は、ここでこれは明らかに間違っているdemo
更新するポインタは、先頭、最初の項目の次のポインタ、最後から2番目の項目の次のポインタ、および最後の項目の次のポインタです。 – user3386109
ノードの代わりに、データの直接のスワッピングを考えましたか?それともそれが必要な学校の運動ですか? –
@WeatherVane残念ながら、私はノードだけでなく、データを交換したいと思います。 – user3120283