2025年单向链表反转c语言(单向链表反向)

单向链表反转c语言(单向链表反向)h5 1 2074 反转偶数长度组的节点 力扣 LeetCode h5 思路 双指针遍历 将链表存入数组中 通过双指针下标遍历定位需要反转的组 typedef struct ListNode LN void Reverse int arr int left int right 反转函数

大家好,我是讯享网,很高兴认识大家。



 <h5>1. 2074. 反转偶数长度组的节点 - 力扣&#xff08;LeetCode&#xff09;</h5> 

讯享网

//思路:双指针遍历。将链表存入数组中,通过双指针下标遍历定位需要反转的组。

typedef struct ListNode LN;

void Reverse(int* arr,int left,int right)//反转函数

{

    while(left&lt;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-&gt;val;

        pmove = pmove-&gt;next;

    }

    int tmp = 0;


讯享网

    int flag = 1;

    int left = 0;

    int right = 0;

    while(right&lt;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-&gt;val = arr[count++];

        pmove = pmove-&gt;next;

    }

    return head;

}


小讯
上一篇 2025-05-21 17:04
下一篇 2025-04-15 13:43

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/163953.html