1. 一个带头结点的双向循环链表,现在交换任意两个结点p、q(p、q不一定相邻),代码怎么写 c语言
定义一个中间指针temp
然后
p->back->next = q;//让p的前一个节点指向q
q->back->next = p;//让q的前一个节点指向p
temp = p->next;
p->next = q->next;
q->next = temp; //交换next指针
temp = p->back;
p->back = q->back;
q->back = temp; //交换back指针
2. c语言编写一个程序,通过改变指针来交换链表中的两个相邻的结点,
定义一个中间指针temp
然后
p->back->next
=
q;//让p的前一个节点指向q
q->back->next
=
p;//让q的前一个节点指向p
temp
=
p->next;
p->next
=
q->next;
q->next
=
temp;
//交换next指针
temp
=
p->back;
p->back
=
q->back;
q->back
=
temp;
//交换back指针
3. 如何交换链表中的两个节点
如果是要交换头指针为h的单链表中的两个值为x和y的结点(省去变量的声明):
for(p=h;p->next.data!=x;p=p->next);
for(q=h;q->next.data!=y;q=q->next);
t=p->next.next; p->next.next=q->next.next; q->next.next=t;
t=p->next; p->next=q->next.next; q->next=t;
4. C语言 用链表做插入排序 之 交换节点的问题
从5->7->9->3->8到7->5->9->3->8为例
首先把5的next指针指向7的next指针,这样就成了5->9->3->8和7->9->3->8
然后把7的next指针指向5,即7->5->9->3->8,交换完毕
建议看看数据结构的链表那节
我说个一般情况吧
链表
...->p1->b1->...->p2->b2->...
其中需要交换b1和b2
首先p1的next指向b2,p2的next指向b1,
然后用一个临时指针temp指向b1的next指针,
再b1的next指向b2的next指针,b2的next指向temp
交换完毕。
像你说的这类单链表的节点交换都可以套用上面的方法
5. c语言双链表节点交换算法,用指针
void change_list_node (struct node *node1,struct node *node2)
{
struct node *temp = node1 -> prev;
(node1 -> prev) -> next = node2;
(node2 -> prev) -> next = node1;
node1 -> prev = node2 -> prev;
node2 -> prev = temp;
node1 -> next -> prev = node2;
node2 -> next -> prev = node1;
temp = node1 -> next;
node1 -> next = node2 -> next;
node2 -> next = temp;
}
6. C++链表如何实现节点交换
c++链表实现节点转换有两种方法:
1)结点交换时机上可以看成是节点里的值交换;
2)直接把节点的地址next的指向改变。
例如:交换LnodeA和LnodeB
用while找到节点的前一个节点pA->next = LnodeA,pB->next = LndoeB
然后pTemp = LnodeA->next;
pB->next = LnodeA;
LndoeA ->next = LnoedeB->next;
pA->next = LndoeA;
LnodeA->next = pTemp;
7. C语言问题:怎样实现对链表中两个结点的交换
有2方法:
第一,找到要交换的2个结点,将2个结点内的数据交换就完成2个结点交换.
因为2个结点不同就是2个结点内数据有区别.
第二,拿掉2个结点,并保持链表完好,再将2结点前后倒置,插到原位置.
当然,如果是双向链表要麻烦些,但思路是一致的.