LeetCode(25)--Reverse Nodes in k-Group

来源:互联网 发布:如何利用网络做直销 编辑:程序博客网 时间:2024/06/16 17:48

转载自博客
题目要求对链表中的元素按K个一组,反序后,形成新的链表。对于最后不满K个元素,保持原来的顺序输出。所以本题可以按如下方法解:
1、建立空的新链表list1.
2、如果原链表剩余元素个数不小于K个,则取K个元素,采用头插法构建反序的临时链表,插入list1的尾部。
3、如果链表剩余元素个数小于K个,则将剩余的链表插入到list1的尾部。
实现代码如下:

class Solution {public:    ListNode* reverseKGroup(ListNode* head, int k) {        if (head == nullptr) return nullptr;        int count = 0;        ListNode* res=NULL;        ListNode tmpHead(-1);        ListNode *tail = &tmpHead;        ListNode*p = head;        //计算链表的长度        while (head)        {            head = head->next;            count++;        }        //待反序的链表数        int m = count / k;        if (m == 0)return p;        while (m)        {            //每k个的头部pHead,再将pHead连接到上一k个            ListNode *pHead = NULL;            for (int i = 0; i < k; i++)            {                ListNode* tmpP = p;                p = p->next;                pHead = addHead(pHead, tmpP);            }            if (m ==count/k)res = pHead;            //上一个的tail尾部连接到新的头部            tail->next = pHead;            //找到每k个反序后的最后一个tail            while (tail->next)            {                tail = tail->next;            }            m--;        }        tail->next = p;        return res;    }    ListNode* addHead(ListNode*head, ListNode* Node)    {        Node->next = head;        return Node;    }};
原创粉丝点击