1. 2074. 反转偶数长度组的节点 - 力扣(LeetCode)
到此这篇单向链表反转c语言(单向链表反向)的文章就 介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在 编程的领域有一番成就!//思路:双指针遍历。将链表存入数组中,通过双指针下标遍历定位需要反转的组。
void Reverse(int* arr,int left,int right)//反转函数
{
while(left<right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
struct ListNode* reverseEvenLengthGroups(struct ListNode* head)
{
LN* pmove = head;
int arr[] = {0};
int count = 0;
while(pmove)//将链表存入数组中
{
arr[count++] = pmove->val;
pmove = pmove->next;
}
int tmp = 0;
int flag = 1;
int left = 0;
int right = 0;
while(right<count)
{
if((right-left)%2)//如果right下标减去left下标的值为奇数,说明组的长度为偶数,需要反转
{
Reverse(arr,left,right);
}
flag++;
left = right+1;//定位每个组的头尾
right+=flag;
}
if((count-1-left)%2)//处理最后一组,right可能越界,因此右指针为数组尾
{
Reverse(arr,left,count-1);
}
pmove = head;
count = 0;
while(pmove)//将数组存回链表
{
pmove->val = arr[count++];
pmove = pmove->next;
}
return head;
}
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/goyykf/19489.html