本文目录一览:
c语言怎么交换链表节点的值
int temp = ptr1-data;
ptr1-data = ptr2-data;
ptr2-data = temp;
只交换值得话就和普通交换就行了;
求教c语言大神 如何交换单向链表的节点
交换链表结点,实质通常是交换结点结构体中除next指针以外的内容。传统、正宗和时效较高的方法是交换结点的关系指针而不交换其他成员。一个结点有自己的指针和指向下一个结点的指针,“自己的指针”就是上一结点的next指针,所以要交换上一结点的next指针和本级的next指针两个指针;而且由于头结点、尾结点的关系指针与中间结点的有所不同,所以遇到与头结点和尾结点交换时处理上与中间结点略有差异。所以操作起来比较麻烦,关系处理不好就会出错。另一个办法是对应交换除next指针以外的所有成员,思路很清晰,就是代码较长,在结点成员较多时更为明显,书写就比较烦琐。有一个既保证思路清晰又书写方便的办法是“整体交换需要交换的两个结点,再把next指针交换回来”。我时常用这种办法。但别看代码读起来顺顺当当,也短浅,可别指望这能提高时效——因为交换结构体变量时,尽管书写很简短,其实还是一个成员对一个成员地进行交换的,何况还多了个“把next指针交换回来”的操作。属个人体会,供参考。
C语言问题:怎样实现对链表中两个结点的交换
有2方法:
第一,找到要交换的2个结点,将2个结点内的数据交换就完成2个结点交换.
因为2个结点不同就是2个结点内数据有区别.
第二,拿掉2个结点,并保持链表完好,再将2结点前后倒置,插到原位置.
当然,如果是双向链表要麻烦些,但思路是一致的.
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;
C语言链表的节点内容互换问题
#include stdio.h
#include string.h
#include stdlib.h
typedef struct student {
char name[20];
int score;
struct student *next;
}STU,*List;
const List createList() {
List head,p;
char name[20];
int score;
head = p = (List)malloc(sizeof(STU));
printf("姓名 成绩:\n");
while(scanf("%s%d",name,score) == 2) {;
p-next = (List)malloc(sizeof(STU));
p = p-next;
strcpy(p-name,name);
p-score = score;
printf("姓名 成绩(Ctrl+Z to quit):\n");
}
p-next = NULL;
return head;
}
/*输出学生成绩单*/
void print(List head) {
List p = head-next;
while(p) {
printf("%s\t%d\n",p-name,p-score);
p = p -next;
}
printf("\n");
}
/*学生成绩排序*/
void sort(List head) {
List p,q,pt,qt;
for(p = head; p-next; p = p-next) {
qt = p;
q = p-next;
while(q-next) {
if(p-next-score q-next-score)
qt = q;
q = q-next;
}
if(p != qt) {
pt = p-next;
p-next = qt-next;
qt-next = p-next-next;
p-next-next = pt;
}
}
}
int main() {
List head = createList();
printf("排序前:\n");
print(head);
sort(head);
printf("排序后:\n");
print(head);
return 0;
}