• 【面试题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         }
  • 相关阅读:
    Maven下Flex国际化配置
    Adobe AIR and Flex
    jQuery: 刨根问底 attr and prop两个函数的区别
    HTML5[8]: 图文混排,图片与文字居中对齐
    HTML5[7]: 实现网页版的加载更多
    HTML5[6]:多行文本显示省略号
    HTML5[5]:在移动端禁用长按选中文本功能
    HTML5[4]:去除不必要的标签,完全使用css实现样式
    HTML5[3]:中文换行
    HTML5[2]:使用viewport控制手机浏览器布局
  • 原文地址:https://www.cnblogs.com/HuoAA/p/4807409.html
Copyright © 2020-2023  润新知