基本的にリンクされたリスト内のノードをソートするプログラムを作成する必要があります。この課題のために記述する必要がある 5 つの関数があり、そのうちの 1 つに行き詰まっています。私が問題を抱えている機能は、2 つのノードを交換することです。関数のヘッダーは次のとおりです。
void swap (struct lnode** head, struct lnode* n1, struct lnode* n2)
2 つのノードが隣り合っていない限り、これは正しく機能します。list.h ファイルが提供されており、 と の 2 つの関数を使用することになっていevictNode(struct lnode** head, struct lnode* node)
ますvoid insertNode (struct lnode** head, struct lnode* prevNode, struct lnode* nodeToBeInserted)
。これらの関数は、next
およびprevious
ポインターの再割り当ても処理します。ノードが隣り合っている場合、ノードを交換する方法が完全にはわかりません。私はそれを描いてみましたが、私の心を包み込むことができませんでした.
ところで、残りのノードを処理する方法は次のコードです。
evictNode(head, n1);
evictNode(head, n2);
insertNode(head, n1prev, n2);
insertNode(head, n2prev, n1);
編集:試み
struct lnode* temp = n2;
insertNode(head,n1prev,temp)
evictNode(head, n2)
struct lnode* n1prev = nodeGetPrev(n1)
前/次のポインターを返す 2 つの関数があります。