首页 > 开发 > Java > 正文

Java面试题-实现复杂链表的复制代码分享

2024-07-13 10:13:02
字体:
来源:转载
供稿:网友

阿里终面在线编程题,写出来与大家分享一下

        有一个单向链表,每个节点都包含一个random指针,指向本链表中的某个节点或者为空,写一个深度拷贝函数,拷贝整个链表,包括random指针。尽可能考虑可能的异常情况。

算法如下:

java;">/*public class RandomListNode {  int label;  RandomListNode next = null;  RandomListNode random = null;  RandomListNode(int label) {    this.label = label;  }}*/public class Solution {  public RandomListNode Clone(RandomListNode pHead)  {    copyNodes(pHead);    setClonedNodes(pHead);    return splitNodes(pHead);  }    //第一步,复制链表任意结点N并创建新结点N‘,再把N'链接到N的后面   public static void copyNodes(RandomListNode head){     RandomListNode temp = head;    while(temp!=null){     RandomListNode clonedNode = new RandomListNode(0);     clonedNode.next = temp.next;     clonedNode.label = temp.label;     clonedNode.random = null;     temp.next = clonedNode;     temp = clonedNode.next;    }   }   //第二步,设置复制出来的结点   public static void setClonedNodes(RandomListNode head){    RandomListNode pNode = head;    while(pNode!=null){     RandomListNode pCloned = pNode.next;     if(pNode.random!=null){      pCloned.random = pNode.random.next;      }     pNode = pCloned.next;    }   }   //第三步,将第二步得到的链表拆分成两个链表   public static RandomListNode splitNodes(RandomListNode head){    RandomListNode pNode = head;    RandomListNode clonedHead = null;    RandomListNode clonedNode = null;    if(pNode!=null){     clonedHead = pNode.next;     clonedNode = pNode.next;     pNode.next = clonedNode.next;     pNode = pNode.next;    }    while(pNode!=null){     clonedNode.next = pNode.next;     clonedNode = clonedNode.next;     pNode.next = clonedNode.next;     pNode = pNode.next;    }    return clonedHead;   }}

总结

以上就是本文关于Java面试题-实现复杂链表的复制代码分享的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出,小编一定及时更正,给大家提供更好的阅读体验及帮助,感谢朋友们对本站的支持!


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表