带随机指针域的单链表的复制
来源:互联网 发布:软件使用情况 编辑:程序博客网 时间:2024/06/06 09:01
题目要求:复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一
个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,
个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,
返回复制后的新链表。
#define _CRT_SECURE_NO_WARNINGS 1typedef int DataType;#define NULL 0#include<stdio.h>#include<windows.h>#include<assert.h>typedef struct Node{DataType data;struct Node*next;struct Node*random;}Node, *LinkList;void InitList(LinkList *L){*L = (Node*)malloc(sizeof(Node));if (*L == NULL){printf("申请内存空间失败");}(*L)->next = NULL;}LinkList BuyNode(DataType data){LinkList NewNode = NULL;NewNode = (LinkList)malloc(sizeof(Node));if (NewNode == NULL){printf("为节点创建空间失败");}NewNode->data = data;NewNode->random =NULL;NewNode->next = NULL;return NewNode;}void PrintList(LinkList L){LinkList Cur = L;if (L == NULL){printf("NULL");}while (Cur){if (Cur == NULL)return;printf("%d %d--->", Cur->data,Cur->random->data);Cur = Cur->next;}printf("NULL\n");}void PushBack(LinkList* L, DataType data){assert(L);LinkList Cur = *L;if (Cur == NULL){Cur = BuyNode(data);}while (Cur->next){Cur = Cur->next;}Cur->next = BuyNode(data);}LinkList Find(LinkList L, DataType data){assert(L);if (L == NULL){return NULL;}LinkList Cur = L;while (Cur != NULL){if (Cur->data == data){return Cur;}Cur = Cur->next;}return NULL;}LinkList CopyLinkListwithRandompoint(LinkList L){LinkList CopyL = NULL;LinkList Cur = NULL;LinkList Tail = NULL;LinkList NewNode = NULL;if (L == NULL)return NULL;else if (L->next == NULL)CopyL = L->next;Cur = L->next;while (Cur->next) //在单链表每一个节点后面插入一个data与原来链表{ //相同的节点NewNode = BuyNode(Cur->data);NewNode->next = Cur->next;Cur->next = NewNode;Cur = NewNode->next;}NewNode = BuyNode(Cur->data);Cur->next = NewNode;Cur = L->next; //为新插入的节点赋随机域while(Cur){NewNode = Cur->next;NewNode->random = Cur->random->next;Cur = NewNode->next;} //拆链表为原链表和复制后之后的链表Cur = L->next;NewNode = Cur->next;Cur->next = NewNode->next;NewNode->next = NULL;CopyL = NewNode;Tail = NewNode;while (1){Cur = Cur->next;NewNode = Cur->next;if (NULL == NewNode->next)break;Cur->next = NewNode->next;NewNode->next = NULL;Tail->next = NewNode;Tail = Tail->next;}Cur->next = NULL;Tail->next = NewNode;Tail = Tail->next;return CopyL;}void test(){LinkList L;InitList(&L);PushBack(&L, 1);PushBack(&L, 2);PushBack(&L, 3);PushBack(&L, 4);L->random = NULL;LinkList L1 = Find(L, 1);LinkList L2 = Find(L, 2);LinkList L3 = Find(L, 3);LinkList L4 = Find(L, 4);L1->random = L4;L2->random = L3;L3->random = L1;L4->random = L2; PrintList(CopyLinkListwithRandompoint(L));}int main(){test();system("pause");return 0;
阅读全文
0 0
- 带随机指针域的单链表的复制
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 带随机指针的链表复制问题
- M1: 复制带随机指针的链表
- 复制一个带随机指针的链表
- LintCode复制带随机指针的链表
- 题目:复制带随机指针的链表
- LintCode(105) 复制带随机指针的链表
- LintCode:复制带随机指针的链表
- lintcode,复制带随机指针的链表
- lintcode,复制带随机指针的链表
- LintCode(M) 复制带随机指针的复杂链表
- 一劳永逸的搞定 flex 布局
- 慕课网——PHP入门篇(PHP中常用的运算符)
- 关于echarts is not defined的问题
- supervisor 使用 :后台进程管理
- 详解mapper.xml文件
- 带随机指针域的单链表的复制
- go语言string、int、int64互相转换
- MK_CONTROL 与 VK_CONTROL 有什么区别,用&与用==的区别
- Java基础初始化
- C/C++ memmove与memcpy的区别及实现
- 多线程(start-point & end-point)
- 使用sqoop将window环境中的oracle数据导入到hdfs出错
- Windows蓝牙通信的开发
- servlet的执行流程