用C++实现含头结点的单链表,然后实现单链表的两个结点交换位置

注意不能简单交换两个结点包含数据,必须通过修改指针来实现两个结点的位置交换

交换函数定义可以参考:

swap(int pa, int pb) //pa和pb表示两个结点在单链表的位置序号

swap (ListNode * p, ListNode * q) //p和q表示指向两个结点的指针

只写交换位置的代码就可以了。。麻烦带上注释!!!
快完整的代码,只差剩下的了

假设你的节点结构如下:
struct
{ int sno; //节点序号
String data; //节点数据
node *nextnode; //指向下个节点
} ListNode;

下面是实现代码:
swap(ListNode *p,ListNode *q)
{
ListNode *tnode=new ListNode(); //生成一个临时节点.
tnode->sno=p->sno; //保存源节点的内容
tnode->data=p->data;
tnode->nextnode=p->nextnode;
p->sno=q->sno; //把目标节点的内容复制到源节点上
p->data=q->data;
p->nextnode=q->nextnode;
q->sno=tnode->sno; //把保存的临时节点重新存入目标节点实现交换
q->data=tnode->data;
q->nextnode=tnode->nextnode;
}

注:由于是单向链表,所以交换前必须从表头查起,查到源节点和目标节点两者各自的前一个节点,并修改这两个节点的指针批向新的位置,以上只是一个模型. 具体的思路就是修改指针后再按新的指针链更正相应的序号.追问

不明所以!!!我就不明白这个 sno 要来干嘛用....
我给你完整的代码吧,你帮我补充剩下的那段交换代码,谢了!
完整代码在补充问题那里。

追答

你这里的Node没有序号,只有数据和指针,所以只需交换指针就行了.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-28
可爱的孩子,你的构造函数里queue::queue(){ front= new node; front=rear;% 这一行应该是rear = front; front->next=NULL; count=0;} 希望采纳rvz如果还有问题先描述一下5可以追问追问

相似回答