输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。class Solution {
public:
    void CloneList(RandomListNode* pHead){
        RandomListNode* cur = pHead;
        RandomListNode* temp = NULL;
        while(cur != NULL){
            temp = new RandomListNode(0);
            temp->label = cur->label;
            temp->next = cur->next;
            temp->random = NULL;
            cur->next = temp;
            cur = temp->next;
        }

    }
    void GetConnection(RandomListNode* pHead){
        RandomListNode* cur = pHead;
        while(cur != NULL){
            if(cur->random != NULL){
               cur->next->random = cur->random->next;
            }
            cur = cur->next->next;
        }

    }
      RandomListNode* pickDump(RandomListNode* pHead)
    {
        if(pHead == NULL ) return NULL;
        RandomListNode* cur = pHead;
        RandomListNode* cloneHead;
        cloneHead = pHead->next;
        RandomListNode* pre = pHead;
        RandomListNode* clonepre=cloneHead;

        cur = cloneHead->next;
         while(cur != NULL){
            pre->next = cur;
            clonepre->next = cur->next;
            pre = cur;
            clonepre=clonepre->next;
            cur = clonepre->next;
         }
          pre->next = NULL;
          clonepre->next =NULL;
           return cloneHead;  

    }
    RandomListNode* Clone(RandomListNode* pHead)
    {
        if(pHead == NULL) return NULL;
        RandomListNode* cloneHead=NULL;
        CloneList(pHead);
        GetConnection(pHead);
        cloneHead = pickDump(pHead);
        return cloneHead;
    }
};

我的问题在于链接的结尾没有结束,杂连在一起了。所以做题要注意细节,包括结尾!!!!!!!!!!!!!!!!!

时间: 2024-12-11 20:35:08

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。的相关文章

求一个数组当中最大(最小)值的两种计算方法

求一个数组当中最大(最小)值的两种计算方法 1.常用方法(以求最大值为例) 1 #include "stdafx.h" 2 #include <string> 3 using namespace std; 4 int _tmain(int argc, _TCHAR* argv[]) 5 { 6 int a[5] = { 1, 23, 2, 6, 7 }; 7 int array_length = sizeof(a) / sizeof(a[0]);//数组大小 8 int m

一个简单的 ASP.NET MVC 例子演示如何在 Knockout JS 的配合下,使用 TypeScript 。

前言 TypeScript 是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构师,已工作于TypeScript的开发.TypeScript扩展了 JavaScript 的句法,所以任何现有的JavaScript程序可以不加改变的在TypeScript下工作.TypeScript是为大型应用之开发而设计,而编译时它产生 JavaScript 以确保兼容性.TypeScript

数据结构-编程实现一个单链表节点的删除

1:代码如下: // ConsoleApplication15.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <malloc.h> #include <iostream> using namespace std; typedef struct node//定义链表结构体 { int data;//节点内容 node *next;//指向结构体的指针,下一个节点 }node; node *create()

数据结构-编程实现一个单链表节点的插入

1:向链表中某个位置(第pos个节点)之后插入节点,这里分别插入到链表首部.插入到链表中间,以及链表尾端3个位置.代码如下: // ConsoleApplication15.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <malloc.h> #include <iostream> using namespace std; typedef struct node//定义链表结构体 { int data;/

单链表的节点内数据值的删除问题(携程网笔试题)

问题描述:给定一个单链表,链表中存储的数据都为整数,给定一个整数x,将单链表中所有与x相等的元素删除. 例如:单链表为(1,2,3,4,2,4),x=2,则删除节点后链表为(1,3,4,4) 分析:这是链表的基本操作问题,具体的Java代码如下: 1 import java.util.*; 2 class Node{ //链表节点的结构 3 int data; 4 Node next=null; 5 } 6 7 public class Main { 8 public static void c

13输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4250795.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:输入一个单向链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针. 题目分析: 1.链表的倒数第0个结点为链表的尾指针,设为r,则r指向最后一

输入一个单向链表,输出该链表中倒数第 k 个结点

class ListNode { public: ListNode() { pNext = NULL; nValue = 0; } ListNode* pNext; int nValue; }; ListNode* CreaList() { int nValue; ListNode* Head = NULL; ListNode* ListIndex = NULL; while(cin >> nValue) { if (Head == NULL) { Head = new ListNode();

编程题:已知一个一维数组a[10]中有10个数,求出第m个数到第n个数的和。其中m、n由键盘输入。

#include<stdio.h> int sum(int *q,int n) { int i,s=0; for(i=0;i<n;i++,q++) s+=*q; return s; } void main() { int n,m,a[10]={1,2,3,4,5,6,7,8,9,10}; int *p; printf("Please input m and n(m<n<10):\n"); scanf("%d,%d",&m,&am

【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点

第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;ListNode* m_pNext;}; 我的思路:先翻转链表,再从翻转后的链表的头向尾数k-1个,返回,再次翻转链表. 代码如下:注意这个思路非常差.差的原因是:如果只是用最原始的方法,先遍历一遍计数,再遍历一遍找倒数第k个,需要遍历两遍.但我的思路,翻转两次链表就要遍历两遍.还要在走k-1步找倒数第k