【发布时间】:2014-01-23 13:56:38
【问题描述】:
这是我的功能:
void switchnodes(NODE **A)
{
if((*A)->next)
{
NODE *first = pop(A);
NODE *second = pop(A);
push(A,first);
push(A,second);
}
}
推送和弹出:
void push(NODE **top,NODE *nnew)
{
nnew->next=*top;
*top=nnew;
}
NODE * pop(NODE **top)
{
NODE *remove = *top;
*top=(*top)->next;
remove->next=0;
return remove;
}
我的困惑:
节点:
typedef struct node {
int value;
struct node *next;
} NODE;
NODE * top 我的链表持有值 1...10
NODE * holder是另一个指针,分别指向链表的第5个和第4个节点
switchnodes(&holder); holder 指向第 5 个节点。第 6 个节点丢失
switchnodes(&(holder->next));holder 指向第四个节点。第 5 和第 6 个节点交换成功。
为什么会这样?
以及如何编写这个函数,这样我就不必传递指针->next?我不能在所有情况下都这样做,比如我需要交换的顶级节点。
【问题讨论】:
-
第一个要问的问题,你有交换节点而不是它们的值吗?
标签: c linked-list