复杂链表的复制
来源:互联网 发布:mac的ppt怎么调16:9 编辑:程序博客网 时间:2024/06/11 20:17
de关于复杂链表:
向复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个bext2指针指向这个链表中的一个随机节点或者NULL
实现代码如下:
#pragma once#include<stdio.h>#include<malloc.h>typedef int DataType;typedef struct HardList{ DataType Data; struct HardList *next; struct HardList *next2;}HardList;HardList* _BuyNode(DataType x)//初始化{ HardList *tmp = (HardList*)malloc(sizeof(HardList)); tmp->Data = x; tmp->next = NULL; tmp->next2 = NULL; return tmp;}void PushBack(HardList* &pHead, DataType x){ if (pHead == NULL) pHead = _BuyNode(x); else { HardList *tial = pHead; while (tial->next != NULL) { tial = tial->next; } tial->next = _BuyNode(x); }}HardList* Find(HardList*& pHead, DataType x){ HardList* cur = pHead; while (cur) { if (cur->Data == x) { return cur; } cur = cur->next; } return NULL;}void PrintSlist(HardList* &pHead){ if (pHead == NULL) { printf("空链表\n"); return; } HardList *cur = pHead; while (cur) { printf("%d->", cur->Data); cur = cur->next; } printf("NULL\n");}HardList* CopyList(HardList* &pHead){ if (pHead == NULL) return NULL; HardList *cur = pHead; while (cur) { HardList *tmp = _BuyNode(cur->Data); //tmp->next2= tmp->next = cur->next; cur->next = tmp; cur = cur->next->next;//cur=null } //HardList *tmp = _BuyNode(cur->Data); //tmp->next = cur->next; //cur->next = tmp;//完成复制 //下一步完成next2的复制 cur = pHead; while (cur) { HardList *p = cur->next; if (cur->next2&&p) { p->next2 = cur->next2->next; } cur = cur->next->next; }//完成next2的复制 //拆分 HardList *p = pHead; HardList *q = p->next; HardList *ret = pHead->next; while (p->next->next) { //if (p->next) q = p->next; p->next = q->next; p = p->next; q->next = p->next; //p = p->next; } p->next = NULL; PrintSlist(ret); return ret;}
每个节点的结构为:
typedef struct HardList
{
DataType Data;
struct HardList *next;
struct HardList *next2;
}HardList;
先创建好单链表,考虑next2这个分量,则需要O(n^2)的时间复杂度
这里我们采用一种巧妙的方法
通过对每一个节点进行复制并插入到原节点的后方,则复制的节点的next2 指针指向的节点则在原节点next2指针的的下一个位置,这样就能够找到复制的节点的next2 指针,然后将奇数位置与偶数位置的节点进行拆分,这样完成了复杂链表的复制
题的思路在于 如何找到节点的next2指针,我们将每一个指针的拷贝插入到原节点之后,这样既完成了每一个节点的复制,又能方便找到复制的链表的next2指针指向的位置:
本文出自 “10945910” 博客,请务必保留此出处http://10955910.blog.51cto.com/10945910/1749927
0 0
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复制复杂的链表
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- iOS开发3DTouch(二)
- mysql The InnoDB memory heap is disabled 问题决解
- (半)linux下ab网站压力测试命令
- 双向链表操作(逆置三种实现以及 冒泡排序 )
- 【c++】菱形虚拟虚拟继承模型探索
- 复杂链表的复制
- c++ 实现动态顺序表(拷贝构造 赋值运算符重载等操作)
- jBPM-4.4安装配置过程
- c++实现单链表(构造函数 拷贝函数 前插 后插 运算符重载 冒泡排序以及逆置)
- js中三种作用域详解(全局,函数,块级)
- STL系列 heap 堆-解析
- elasticsearch第二章:搭建elasticsearch2.3.3 cluster
- 从1打印到最大的n位数字(字符串模拟数字自加)
- c++ 深浅拷贝(传统写法 xain'dai'xie'fa)