pivot = a, a = a->next, pivot->next = NULL; を実行すると、
pivot{}->{1,"ccc",NULL}
a{}->{2,"aaa",}->{3,"ddd",}->{4,"bbb",NULL}
a のリストの先頭から順番に取り外し、
pivot の "ccc" より小さい name のものを less リストに追加し、
pivot の "ccc" より大きい name のものを greater リストに追加する
ということを繰り返す。
int diff = strcmp(a->name, pivot->name); を実行すると、
"aaa" < "ccc" だから diff は負の値で、a の先頭を less に追加する。
add(less) は、 p = a, a = a->next, p->next = less, less = p なので、
p{}->{2,"aaa",NULL} (less は NULL だったので)
a{}->{3,"ddd",}->{4,"bbb",NULL}
less{}->{2,"aaa",NULL}
int diff = strcmp(a->name, pivot->name); を実行すると、
"ddd" > "ccc" だから diff は正の値で、a の先頭を greater に追加する。
add(greater) は、 p = a, a = a->next, p->next = greater, greater = p なので、
p{}->{3,"ddd",NULL} (greater は NULL だったので)
a{}->{4,"bbb",NULL}
greater{*}->{3,"ddd",NULL}
int diff = strcmp(a->name, pivot->name); を実行すると、
"bbb" < "ccc" だから diff は負の値で、a の先頭を less に追加する。
add(less) は、 p = a, a = a->next, p->next = less, less = p なので、
p{}->{4,"bbb",}->{2,"aaa",NULL} (less の先頭に追加)
a{NULL}
less{}->{4,"bbb",}->{2,"aaa",NULL}
a が NULL なので、while (a) のループを終了
less = quick_sort(less) で less をソート
less{}->{2,"aaa",}->{4,"bbb",NULL}