zoukankan      html  css  js  c++  java
  • 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

    // test20.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<iostream>
    #include<vector>
    #include<string>
    #include<queue>
    #include<stack>
    #include<cstring>
    #include<string.h>
    #include<deque>
    
    using namespace std;
    
    
    struct RandomListNode {
    	int label;
    	struct RandomListNode *next, *random;
    	RandomListNode(int x) :
    	label(x), next(NULL), random(NULL) {
    	}
    };
    
    class Solution {
    public:
    	RandomListNode* Clone(RandomListNode* pHead)
    	{
    		//两次遍历pHead
    		//第一次顺序遍历new出新的链表
    		//第二次遍历random节点
    		RandomListNode *p = pHead;
    		RandomListNode *newHead = NULL;
    		RandomListNode *pre = NULL;
    		//第一次遍历
    		if (p != NULL)
    		{
    			newHead = new RandomListNode(p->label);
    			if (p->random != NULL)
    				newHead->random = new RandomListNode(p->random->label);
    			pre = newHead;
    			p = p->next;
    		}
    		
    		while (p!=NULL)
    		{
    			pre->next = new RandomListNode(p->label);
    			pre = pre->next;
    			if (p->random != NULL)
    				pre->random = new RandomListNode(p->random->label);
    			p = p->next;
    		}
    
    		//cout << "复制后的链表是:" << endl;
    		//while (newHead != NULL)
    		//{
    		//	cout << newHead->label << "  ";
    		//		newHead = newHead->next;
    		//}
    		//第二次遍历
    	/*	cout << "复制后的链表是:" << endl;
    		while (newHead != NULL)
    		{
    			cout << newHead->label << "  ";
    			newHead = newHead->random;
    		}*/
    	
    		return newHead;
    	}
    };
    
    int main()
    {
    	
    	Solution so;
    
    	RandomListNode *node01 = new RandomListNode(1);
    	RandomListNode *node02 = new RandomListNode(2);
    	RandomListNode *node03 = new RandomListNode(3);
    	RandomListNode *node04 = new RandomListNode(4);
    	RandomListNode *node05 = new RandomListNode(5);
    	RandomListNode *node06 = new RandomListNode(6);
    	RandomListNode *node07 = new RandomListNode(7);
    	RandomListNode *node08 = new RandomListNode(8);
    	node01->next = node02;
    	node02->next = node03;
    	node03->next = node04;
    	node04->next = node05;
    
    	node01->random = node06;
    	node06->random = node07;
    	node07->random = node08;
    	RandomListNode* T = so.Clone(node01);
    	
    	
    	
    	cout << endl;
    	return 0;
    }
  • 相关阅读:
    【原创】虚拟机上实现绑定固定IP扩主机容器互访
    docker entrypoint入口文件详解
    数据库博客推荐
    docker下centos安装ping命令
    Dockerfile指令详解
    Elasticsearch Java API 的使用
    docker容器里面安装ssh
    RPM安装命令总结
    Docker容器的跨主机连接
    使用Java程序片段动态生成表格
  • 原文地址:https://www.cnblogs.com/wdan2016/p/6027386.html
Copyright © 2011-2022 走看看