リンクされた2つのリストを交換しようとしていますが、ソート関数は機能しません。どうすればノード全体を入れ替えることができますか?私がしようとしているのは、メンバーを交換する代わりに、リスト全体を交換することです。リンクリストノードをスワップする方法
typedef struct node
{
char *first_name;
char *last_name;
struct node *next;
}person;
person *new_p(char *name, char *last)
{
person *p;
p = malloc(sizeof(p));
if (p)
{
p->first_name = name;
p->last_name = last;
p->next = NULL;
}
return (p);
}
void swap(person *a, person *b)
{
person tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void sort(person *s)
{
person *list;
list = s;
while (list->next)
{
if (strcmp(list->first_name, list->next->first_name) > 0)
{
swap(list, list->next);
}
list = list->next;
}
}
問題を診断するためにここに十分ではありません。 [最小、完全、検証可能な例](http://stackoverflow.com/help/mcve)を投稿してください。 – dbush
完全な回答が得られるように[mcve]を投稿してください。しかし、 'next'ポインタが正しく更新されていない(またはまったく)ために、おそらく見えます。実際、リンクされたリスト内のノードを交換するには、 'next'ポインタを変更し、ノード全体をコピーしないでください。 – kaylum
@kaylumここに完全なコードhttp://code.geeksforgeeks.org/da81PB –