25. Reverse Nodes in k-Group

来源:互联网 发布:数据预处理过程 编辑:程序博客网 时间:2024/06/09 18:26
/**此算法算是逆转相邻的结点的加强版,相邻的属于此算法的特殊情况即(K=2)。此外在K个长度内有点头插法的相似性 * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* reverseKGroup(ListNode* head, int k) {        if (head == NULL || head->next == NULL)//如果只有一个点,直接返回首结点;return head;ListNode*L = head;ListNode*p = NULL, *q = NULL, *s = NULL;ListNode*pre = new ListNode(0);//为了方便设置一个头结点;pre->next = head;ListNode*flag = pre;int count = 0, num;while (L != NULL)//求出链表的长度;{count++;L = L->next;}for (int i = 0; i < (count / k); i++)//求出需要逆置几段K个长度{p = flag->next;q = p->next;for (int j = 1; j < k ; j++)//每次逆转K个点,就得更改指针k-1次;{s = q->next;q->next = flag->next; //每次链接新的结点;flag->next = q;p->next = s;q = s;}flag = p;//更新每次的标志指针;}return pre->next;    }};

0 0
原创粉丝点击