• 【面试题26】复杂链表的复制


    【题目描述】

    请实现函数ComplexListNode* Clone(ComplexListNode* pHead)。

    复制一个复杂链表,每个结点,除了有一个m_pNext指针指向下一个结点,还有一个m_pSibling指向链表中的任意结点或者null。

    【解决方案】

    方法二:

    我的代码实现,仅供参考:

     1         public static ComplexListNode Clone(ComplexListNode head)
     2         {
     3             CloneNode(head);
     4             ConnectSiblingNodes(head);
     5             return ReconnectNodes(head);
     6         }
     7 
     8         /// <summary>
     9         /// 复制原始链表
    10         /// </summary>
    11         /// <param name="head"></param>
    12         public static void CloneNode(ComplexListNode head)
    13         {
    14             ComplexListNode node = head;
    15 
    16             while (node != null)
    17             {
    18                 ComplexListNode cloneNode = new ComplexListNode();
    19 
    20                 cloneNode.Value = node.Value;
    21                 cloneNode.Next = node.Next;
    22 
    23                 node.Next = cloneNode;
    24                 node = cloneNode.Next;
    25             }
    26         }
    27 
    28         /// <summary>
    29         /// 设置Sibling
    30         /// </summary>
    31         /// <param name="head"></param>
    32         public static void ConnectSiblingNodes(ComplexListNode head)
    33         {
    34             ComplexListNode node = head;
    35 
    36             while (node != null)
    37             {
    38                 ComplexListNode cloneNode = node.Next;
    39 
    40                 if (node.Sibling != null)
    41                 {
    42                     cloneNode.Sibling = node.Sibling.Next;
    43                 }
    44 
    45                 node = cloneNode.Next;
    46             }
    47         }
    48 
    49         /// <summary>
    50         /// 将CloneNode复制出来
    51         /// </summary>
    52         /// <param name="head"></param>
    53         /// <returns></returns>
    54         public static ComplexListNode ReconnectNodes(ComplexListNode head)
    55         {
    56             ComplexListNode node = head;
    57             ComplexListNode cloneHead = null;
    58             ComplexListNode cloneNode = null;
    59 
    60             if (node != null)
    61             {
    62                 cloneHead = cloneNode = node.Next;
    63                 node.Next = cloneNode.Next;
    64                 node = node.Next;
    65             }
    66 
    67             while (node != null)
    68             {
    69                 cloneNode.Next = node.Next;
    70                 cloneNode = cloneNode.Next;
    71                 node.Next = cloneNode.Next;
    72                 node = node.Next;
    73             }
    74 
    75             return cloneHead;
    76         }
  • 相关阅读:
    U9在SQL Server上的性能优化经验(转述) — 之 分页
    家里买了XBOX 360 Kinect
    哦,真是“不幸”的消息
    U9在SQL Server上的性能优化经验(转述) — 之 包含列索引
    Silverlight 4处理StartWith的BUG
    IIS HTTP重定向配置、参数设置
    【代码保留】怎样添加一个多选搜索引擎
    NSLog 使用
    ObjectiveC(IOS)推荐的属性读写方法
    16进制颜色(html颜色值)字符串转为UIColor
  • 原文地址:https://www.cnblogs.com/HuoAA/p/4807409.html
Copyright © 2020-2023  润新知