最近速成学到了图,复习一下前面的链表,因此找到了这道题。
可是我发🧵这似乎有一定的难度,也是看了好多题解才写出来。
一定要画图!画图yyds!
void K_Reverse( List L, int K )
{
int sum=0,i,j;
List o=L->Next;
while(o) {o=o->Next; sum++;} //计算链表中结点数量
if(K==0 || K== 1 || L->Next == NULL) return ; //排除特例,反转前0个,前1个,链表无任何变化;若该表是空表,也无任何变化
else
{
List start,p1,p2,tmp,head;
head = L; //上一段的末尾,「相对头结点」--->上一段的最后一个元素,每次反转后,
//这个结点都要与下一段的最后一个元素相连(因为最后一个元素反转成了第一个元素)
for(i=0;i<sum/K;i++)
{
start = head->Next; //这一段第一个元素,也是反转后的最后一个元素
p1=head->Next; //反转指针1,指向前一个元素,也就是「相对头结点」的下一个
p2=p1->Next; //反转指针2,指向后一个元素
for(j=0;j<K-1;j++)