zoukankan      html  css  js  c++  java
  • 算法--链表的K逆序问题

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/9e6f4dda3138cf9fab17f996ec85b624.html 


    链表的K逆序问题

     
     
    链表的k逆序
     

    第7节 链表的k逆序练习题

     

    有一个单链表,请设计一个算法,使得每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值,返回逆序后的链表的头指针。

     
     
    1
    import java.util.*;
    2
    
    
    3
    /*
    4
    public class ListNode {
    5
        int val;
    6
        ListNode next = null;
    7
    
    
    8
        ListNode(int val) {
    9
            this.val = val;
    10
        }
    11
    }*/
    12
    public class KInverse {
    13
        public ListNode inverse(ListNode head, int k) {
    14
            if (k < 2) {
    15
                return head;
    16
            }
    17
            ListNode cur = head;//正在遍历的当前节点
    18
            ListNode start = null;
    19
            ListNode pre = null;
    20
            ListNode next = null;//待遍历的下一个节点
    21
            int count = 1;
    22
            while (cur != null) {
    23
                next = cur.next;
    24
                if (count == k) {//count满足要求开始进行逆序
    25
                    start = pre == null ? head : pre.next;
    26
                    head = pre == null ? cur : head;
    27
                    resign(pre, start, cur, next);
    28
                    pre = start;
    29
                    count = 0;
    30
                }
    31
                count++;
    32
                cur = next;
    33
            }
    34
            return head;
    35
        }
    36
        public void resign(ListNode left, ListNode start, ListNode end,
    37
                ListNode right) {
    38
            ListNode pre = start;
    39
            ListNode cur = start.next;
    40
            ListNode next = null;
    41
            while (cur != right) {
    42
                next = cur.next;
    43
                cur.next = pre;
    44
                pre = cur;
    45
                cur = next;
    46
            }
    47
            if (left != null) {
    48
                left.next = end;
    49
            }
    50
            start.next = right;
    51
        }
    52
    }
     
     
    您的代码已保存
    答案正确:恭喜!您提交的程序通过了所有的测试用例
     
  • 相关阅读:
    [转载]Markdown基础语法
    [转载]转发和重定向的区别
    浅谈网站搭建中的内网穿透、端口转发等知识点
    [转载]HTTP和HTTPS
    [转载]为什么有些语言可以被反编译?而有的不能?
    例10-2 uva12169(扩展欧几里得)
    例10-1 uva11582(裴波那切数列)
    例10-7 uva10820(欧拉)
    hdu 5137(2014广州—最短路)
    hdu 5135(2014广州—状态dp)
  • 原文地址:https://www.cnblogs.com/haozhengfei/p/9e6f4dda3138cf9fab17f996ec85b624.html
Copyright © 2011-2022 走看看