我必须编写一个程序,该程序基本上会对链表中的节点进行排序。我有 5 个函数需要为此作业编写,但我被困在其中一个函数上。我遇到问题的功能是交换两个节点。该函数的标头如下:
void swap (struct lnode** head, struct lnode* n1, struct lnode* n2)
只要两个节点不相邻,我就可以正常工作。我们有一个提供给我们的 list.h 文件,我们应该使用两个函数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)
有两个函数返回上一个/下一个指针