美文网首页
5_7链表的k逆序

5_7链表的k逆序

作者: X_Y | 来源:发表于2017-09-14 21:46 被阅读9次

有一个单链表,请设计一个算法,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。例如链表1->2->3->4->5->6->7->8->null,K=3这个例子。调整后为,3->2->1->6->5->4->7->8->null。因为K==3,所以每三个节点之间逆序,但其中的7,8不调整,因为只有两个节点不够一组。

给定一个单链表的头指针head,同时给定K值,返回逆序后的链表的头指针。

/*
   struct ListNode {
   int val;
   struct ListNode *next;
   ListNode(int x) : val(x), next(NULL) {}
   };*/
class KInverse {
    public:
        ListNode* inverse(ListNode* head, int k) {
            // write code here
            int cnt = 1;
            ListNode *first = head, *curr = head, *next_gp = head,
                     *local_curr = head, *pre_end = head, *local_pre=head, *local_nxt = head;
            while(curr){
                if(k == cnt){
                    // 记录第一段需要反转的段前和段后
                    head = curr;
                    next_gp = curr->next;
                    local_pre = next_gp;
                    // 反转内部节点
                    while(local_curr != next_gp){
                        local_nxt = local_curr->next;
                        local_curr->next = local_pre;
                        local_pre = local_curr;
                        local_curr = local_nxt;
                    }
                    // 为下次做准备
                    curr = first;
                    first = next_gp;
                    pre_end = curr;
                }else if(cnt > k && 0 == cnt%k){
                    // 记录段前和段后,并将收尾相连
                    pre_end->next = curr;
                    next_gp = curr->next;
                    local_pre = next_gp;
                    local_curr = first;
                    // 反转内部节点
                    while(local_curr != next_gp){
                        local_nxt = local_curr->next;
                        local_curr->next = local_pre;
                        local_pre = local_curr;
                        local_curr = local_nxt;
                    }
                    // 为下次做准备
                    curr = first;
                    first = next_gp;
                    pre_end = curr;
                }
                curr = curr->next;
                ++cnt;
            }
            return head;
        }
};

相关文章

  • 5_7链表的k逆序

    有一个单链表,请设计一个算法,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。例如链表1-...

  • 2.单链表

    该部分包含以下内容-单链表的增删改查-计算链表长度-逆序链表-寻找(删除)链表倒数第K个元素-逆序打印链表(使用栈)

  • 面试常考的链表操作

    1、链表的结构 2、链表的逆序 3、找出倒数第k个 4、找出中间元素 5、判断链表是否有环

  • Python 将链表逆序

    说明:链表逆序,是将链表中的单向链表逆序,双向链表逆序和正序都是一样的,所以没有任何意义。 代码: class N...

  • 算法-链表每k位逆序

    链表的每K位逆序,其实主要的思路就是三个步骤:1.找到k个节点的开始节点和结束节点,还有当前这k个节点的最后一个节...

  • LeetCode 2. Add Two Numbers

    单链表逆序相加

  • 链表逆序

    定义ListNode节点结构体 例题:链表链接 LeetCode 206. Reverse Linked Lis...

  • 链表逆序

    -(void)reverse(node *head) { node*per,; node *current = h...

  • 链表逆序

    链表逆序 1.基础 链表是一种递归的数据结构,它或者为空,或者是指向一个结点(node)的引用,该结点含有一个泛型...

  • 链表逆序

    如A->B->C->D->E 思路一: 先取出链表的最后一个E,然后将E作为新链表的头, 现在状态为 原始链表:A...

网友评论

      本文标题:5_7链表的k逆序

      本文链接:https://www.haomeiwen.com/subject/fidjsxtx.html