zoukankan      html  css  js  c++  java
  • 25. Reverse Nodes in k-Group

    SLinkedList<int> slist = new SLinkedList<int>();
    slist.AppendRange(new[] { 1, 2, 3, 4, 5 });
    Console.WriteLine("Input: " + slist.Print());
    Console.WriteLine("k = 2");
    var rslt = slist.ReverseKGroup(2);
    Console.WriteLine("Output:" + rslt.Print());
    Console.WriteLine("k = 3");
    rslt = slist.ReverseKGroup(3);
    Console.WriteLine("Output:" + rslt.Print());
    

    /// <summary>
    /// k 个相邻的元素,翻转链表,多余的继续保持
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="source"></param>
    /// <param name="k"></param>
    /// <returns></returns>
    public static SLinkedList<T> ReverseKGroup<T>(this SLinkedList<T> source, int k) where T : IComparable<T>
    {
        var tmp = new SLinkedList<T>(source);
        var node = ReverseKGroupImp(tmp.Head, k);
        return new SLinkedList<T>(node);
    }
    private static SLinkedListNode<T> ReverseKGroupImp<T>(SLinkedListNode<T> head, int k) where T : IComparable<T>
    {
        var node = head;
        for (int i = 0; i < k; i++)
        {
            if (node == null)
            {
                return head;
            }
            node = node.Next;
        }
        var newHead = Reverse(head, node);
        head.Next = ReverseKGroupImp(node, k);
        return newHead;
    }
    
    private static SLinkedListNode<T> Reverse<T>(SLinkedListNode<T> first, SLinkedListNode<T> last) where T : IComparable<T>
    {
        var prev = last;
        while (first != last)
        {
            var tmp = first.Next;
            first.Next = prev;
            prev = first;
            first = tmp;
        }
        return prev;
    }
    
  • 相关阅读:
    关于软件工程的疑问
    thinkphp基础入门(2)
    JS What does `void 0` mean?
    第2章 TCPIP的工作方式
    JavaScript中var a=b=c=d的发现
    如何让 Git 忽略掉文件中的特定行内容?
    thinkphp基础入门(1)
    IIS网站服务器性能优化指南(转载)
    240个jquery插件
    解决_动态加载JS文件_调用时出错
  • 原文地址:https://www.cnblogs.com/wesson2019-blog/p/15509679.html
Copyright © 2011-2022 走看看