[Bug] 两个链表,交错组合为另一个链表

ListNode dummy3 = new ListNode(-1);
ListNode pre = dummy3;
while(head2!=null&&head1!=null){
     pre.next=head1;
     ListNode head1next = head1.next;
     head1.next=head2;
     ListNode head2next = head2.next;
     head2.next=null;
     pre=head2;
     head1=head1next;
     head2=head2next;
 }

上面这段代码时正确的写法。

 1 ListNode dummy3 = new ListNode(-1);
 2 ListNode pre = dummy3;
 3 while(head2!=null&&head1!=null){
 4      pre.next=head1;
 5      pre.next.next = head2;
 6      //ListNode head1next = head1.next;
 7      //head1.next=head2;
 8      //ListNode head2next = head2.next;
 9      //head2.next=null;
10      pre=head2;
11      head1=head.next;
12      head2=head.next;
13  }

上面的代码时错误的,在第5行代码执行完毕之后实际上head1的next指针已经丢失了,原因是在第5行代码执行的时候实际上是讲head1的next指针进行了重新定义,指向了head2,但是在更改这个指针之前,它的原先的next指针并没有修改,这个next指针将成为新的head1.

谨慎之!

时间: 2024-10-02 06:12:43

[Bug] 两个链表,交错组合为另一个链表的相关文章

9月10日,美团网2014校招研发笔试哈尔滨站 1、链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现

// reverselink.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" struct Node{ int num; struct Node*next; }; typedef struct Node Node; Node * createLink(){ Node *head=NULL,*urn,*tail; int data; cin>>data; while(data>0){ urn=(Node*)malloc(sizeo

利用C++实现一个链表结构

利用C++实现链表结构 1.定义链表的数据结构 CList作为一个链表类,它的成员是由CNode组成 CNode有两个属性,tElement用于指向当前的节点,next用于指向下一个节点 /******************************************************** ** CList链表结构实现 ** ** ** ***********************************************************/ #ifndef _LIST

将两个有序链表和为另外一个链表,并保证有序

直接递归 代码: #include <iostream> #include <stack> using namespace std; typedef struct listNode{ int key; struct listNode *pNext; } * pNode,Node; void createNode(pNode &pHead){ bool isFirst=true; int temp; scanf("%d",&temp); pNode

将两个无序链表合成一个链表

对于链表,可以先将两个链表排序,然后再将其枚举合成一个链表. 或者是先将一个链表接到另一个链表的尾部,然后将总链表排序. 1 #include <bits/stdc++.h> 2 #include <iostream> 3 #include <cstring> 4 #include <cstdio> 5 #include <malloc.h> 6 using namespace std; 7 struct Node{ 8 int date; 9

sql两个表的组合查询以及yii下使用数据库查询

sql两个表的组合查询  使用 join on 例如:两个表查询: select u.username, t.title from user u join task t on u.id = t.id; 其中  user u 是用来把表名简化   join则是加入其他的表    on则是表示查询的条件   u.username 则是表示user表中的username字段 同样的道理  多表查询的原理也是一样的 这是sql语句: select * from user u join task t on

用两种递归思路与循环实现单链表的反转

typedef struct ListNode{ int data; struct ListNode *next; }ListNode; //递归一 ListNode *ReverseList (ListNode *pHead, ListNode *nHead = NULL) { //每次取下第一个节点头插法创建新链表 //nHead为反转后链表的头节点 if(pHead == NULL) return NULL; ListNode *pNext = pHead -> next; pHead -

【LeetCode】21. Merge Two Sorted Lists合并两个有序链表,得到新的有序链表

一.描述: 二.思路: 两个有着相同排序类型(降序或升序)的链表,合并为一新的链表,并且要求有序(和两个子链表的排序相同): 判断2个子链表是否为空,若有空链表,则返回另一不为空的链表: 两者均不为空,判断链表结点值val的大小,(此处应该有2中排序结果,大->小 或 小->大),该题中提交只接受 小->大 类型: 故新的链表头指针指向val值较小的结点,子链表中去除已经被新链表指向的结点,再次重复该操作,即新链表头指针.next指向下一个较小值对应的结点--,即递归实现. 三.代码:

反转一个链表的两种方法:递归和循环

下面是反转一个链表的两种方法: 一.循环算法 //反转一个链表,循环算法 LinkList Reverse(LinkList& head) { // if(!head) // return head; //此时不用判断head是否为空,如是空的话返回的也是空 LinkList cur = head; LinkList hou; LinkList beh = 0; while (cur) { hou = cur->next; cur->next = beh; beh = cur; cur

bzoj4767两双手 容斥+组合

4767: 两双手 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 684  Solved: 208[Submit][Status][Discuss] Description 老W是个棋艺高超的棋手,他最喜欢的棋子是马,更具体地,他更加喜欢马所行走的方式.老W下棋时觉得无聊,便 决定加强马所行走的方式,更具体地,他有两双手,其中一双手能让马从(u,v)移动到(u+Ax,v+Ay)而另一双手能让 马从(u,v)移动到(u+Bx,v+By).小W看见老