题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。结点定义如下:
struct ListNode{ int val; struct ListNode *next; struct ListNode *sibling;};思路:
代码:
ListNode* Clone(ListNode* pHead){ ListNode* node = pHead; /// 复制链表 while(node != NULL) { ListNode* newNode = new ListNode(); newNode->val = node->val; newNode->next = node->next; newNode->sibling = NULL; node->next = newNode; node = newNode->next; } /// 将复制出来的结点的sibling指向对应的结点 node = pHead; while(node != NULL) { if(node->sibling != NULL) { node->next->sibling = node->sibling->next; } node = node->next->next; } /// 拆分链表 ListNode* pCloneHead = NULL; ListNode* pCloneNode = NULL; node = pHead; if(node != NULL) { pCloneNode = pCloneHead = node->next; node->next = pCloneNode->next; node = node->next; } while(node != NULL) { pCloneNode->next = node->next; pCloneNode = pCloneNode->next; node->next = pCloneNode->next; node = node->next; } return pCloneHead;}不得不说,这个方法太巧妙了。
新闻热点
疑难解答