基础实验3-2.2 单链表分段逆转 (25分)
程序员文章站
2022-06-07 14:20:00
...
单链表逆序不一定要用头插法从新建一个链表,可以节点间的交换
/*思路:*/
void K_Reverse( List L, int K ){
List H = (List)malloc(sizeof(struct Node));
H->Next = NULL;
int i = 0,len=0,cnt;
List p = L->Next,q = L,t,s,x,temp;
while(p){
len++;
p = p->Next;
}
if(len==0||K>len||K<=1){
return;
}
for(i=0;i<len/K;i++){
cnt=1;
t = q->Next; //t指向已逆序的首节点
s = t->Next; //s指向未逆序的首节点
x = t; //每次逆序玩x就变成了逆序的最后一个节点
while(cnt<K){
temp = s->Next;
s->Next = t;
t = s;
s = temp;
cnt++;
}
q->Next = t; //q->Next指向已逆序的首节点
x->Next = temp; //由于while内已逆序的和未逆序的是非开的,这里已逆序的最后一个节点的下一位指向未逆序的第一位。
q = x; //q指向已逆序的最后一位,为后面的节点逆序做准备。
}
}
下一篇: 1017 A除以B (20分)