美文网首页
【C#】【数据结构】033-链表类习题:📝逆转链表问题

【C#】【数据结构】033-链表类习题:📝逆转链表问题

作者: lijianfex | 来源:发表于2018-11-23 08:29 被阅读12次

逆转链表:

问题1:

逆转单链表的 前 K 个 连续的节点

输入:1-->2--->3--->4--->5--->null
K=3
输出:3--->2--->1--->4--->5--->null

/// <summary>
    /// 1、逆转单链表的 前 K 个 连续的节点
    /// </summary>
    /// <param name="List">带有头指针的单链表</param>
    /// <param name="head">头指针</param>
    /// <param name="k">要逆转的长度</param>
    public static void ReverseK( Node<T> head, int k)
    {
        if (head.Next==null) return;

        int count = 1;

        Node<T> newNode = head.Next;
        Node<T> oldNode = newNode.Next;
        Node<T> afterNode = new Node<T>();



        while (count < k && oldNode != null)
        {
            afterNode = oldNode.Next;
            oldNode.Next = newNode;
            newNode = oldNode; oldNode = afterNode;
            count++;
        }
        head.Next.Next = oldNode;
        head.Next = newNode;
    }

问题2:

逆转单链表的 第 i至k 个 连续的节点

输入:3--->2--->1--->4--->5--->null
i=2,k=4
输出:3--->4--->1--->2--->5--->null

/// <summary>
    /// 2、逆转单链表的 第 i至k 个 连续的节点
    /// </summary>
    /// <param name="List">带有头指针的单链表</param>
    /// <param name="head">头指针</param>
    /// <param name="i">起始</param>
    /// <param name="k">结束</param>
    public static void ReverseItoK( Node<T> head, int i, int k)
    {
        if (head.Next == null) return;

        int count = 1;

        Node<T> beforeNode = head;
        Node<T> newNode = head.Next;
        Node<T> oldNode = newNode.Next;
        Node<T> afterNode = new Node<T>();

        if(i>k)
        {
            int temp = i;
            i = k;
            k = temp;
        }


        while (count < k && oldNode != null)
        {
            afterNode = oldNode.Next;
            if (count < i)
            {
                beforeNode = newNode;
            }
            if (count >= i)
            {
                oldNode.Next = newNode;
            }
            newNode = oldNode; oldNode = afterNode;
            count++;
        }
        beforeNode.Next.Next = oldNode;
        beforeNode.Next = newNode;
    }

问题3:

K 个一组逆转链表 leetcode-25

输入:3--->4--->1--->2--->5--->null
k=2
输出:4--->3--->2--->1--->5--->null

利用了问题2的函数,来解决此问题

/// <summary>
    /// 3、K 个一组逆转链表
    /// </summary>
    /// <param name="head"></param>
    /// <param name="k"></param>
    public static void ReverseKGroup( Node<T> head, int k)
    {
        if (head.Next == null) return;

        int start = 1;

        Node<T> curNode=head.Next;

        while(true)
        {
            for(int i=0;i<k;i++) //检查后方是否有 K 个元素
            {
                if (curNode == null)
                {
                    return; //没有就 终止函数
                }
                curNode = curNode.Next;                
            }
            
            ReverseItoK(head, start, start + k-1); //调用问题2的函数
            start += k;
        }
    }

测试用例:

public class _020_RevesingLinkedList : MonoBehaviour
{


    void Start()
    {
        LinkList<int> List = new LinkList<int>();


        List.Add(1);
        List.Add(2);
        List.Add(3);
        List.Add(4);
        List.Add(5);
        Debug.Log("初始单链表");
        List.Display();

        RevesingLinkedList<int>.ReverseK( List.Head, 3);
        Debug.Log("逆转单链表的前3个元素");
        List.Display();

        RevesingLinkedList<int>.ReverseItoK(List.Head, 2, 4);
        Debug.Log("逆转单链表的2-4号元素");
        List.Display();

        RevesingLinkedList<int>.ReverseKGroup(List.Head,2);
        Debug.Log("2个一组逆转单链表元素");
        List.Display();
    }
}

测试结果:

相关文章

  • 【C#】【数据结构】033-链表类习题:📝逆转链表问题

    逆转链表: 问题1: 逆转单链表的 前 K 个 连续的节点输入:1-->2--->3--->4--->5--->n...

  • C# 链表

    链表介绍 Unity 用C#写的链表类 简述链表和数组的区别 Unity--链表实现贪吃蛇

  • 2019-7-19

    部分常用容器类 HashMap 底层数据结构,数组 + 链表/红黑树链表类 - Node - 单链表 红黑树类 -...

  • 链表反转

    概述 链表反转是非常经典的面试题,要实现此功能,需先实现链表的数据结构。 链表类 获得单向链表方法 输出单向链表方...

  • Java常用类库与技巧-集合

    一 数据结构常见问题 数组和链表的区别;链表的操作,如反转,链表环路检测,双向链表,循环链表相关操作;队列,栈的应...

  • 数据结构 | 其二 链表

    冰河winner - 数据结构之链表 2.1 单向链表 数据结构(一) 单链表的实现-JAVA 2.2 双端链表 ...

  • 常用66算法类型及思路.markdown

    数据结构类题目 LinkedList 003-从尾到头打印链表 014-链表中倒数第k个结点 015-反转链表 `...

  • 算法与数据结构知识汇总(二、链表)

    1、概念 2、链表的数据结构 单向链表的数据结构如下图: 上图数据结构为单向链表,简称单链表,该数据结构由若干个节...

  • iOS 数据结构之链表

    iOS 数据结构之链表 iOS 数据结构之链表

  • 链表

    内容 链表数据结构 向链表添加元素 从链表移除元素 使用 LinkedList 表 双向链表 循环链表 链表数据结...

网友评论

      本文标题:【C#】【数据结构】033-链表类习题:📝逆转链表问题

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