在复杂链表中,每个节点不止有指向下一个节点的指针,还有一个指向表中任意节点的指针pSibling。
方法:
第一步在每个节点N后面创建节点'N,把N'连接到N的后面
void f1(ListNode pHead){ ListNode pNode =pHead; while( pNode !=null) { ListNode pCloned= new ListNode(); pCloned.value = pNode.value; pCloned.next= pNode.next; pCloned.pSibling= null; pNode.next=Cloned; pNode=Cloned.next; } }
第二步:设置复制出来节点的pSibling
void f2(ListNode pHead){ ListNode pNode =pHead; while( pNode !=null) { ListNode pCloned= pNode; if( pNode.pSibling != null) pCloned.pSibling= pNode.pSibling.next; pNode=Cloned.next; } }
第三步:拆分链表,奇数位连接起来就是原始链表,偶数位则是复制的链表结果
ListNode f3( ListNode pHead){ ListNode pNode=pHead; ListNode pClonedHead= null; ListNode pClonedNode =null; //定义头结点 if(pNode !=null){ pClonedHead=pClonedNode=pNode.next; pNode.next=pClonedNode.next; pNode=pNode.next; } while( pNode !=null){ pClonedNode.next =pNode.next; pClonedNode = pClonedNode.next; pNode.next=pClonedNode.next; pNode =pNode.next; } }