链表-一段输出两个list不同之处的代码,求大神解释

问题描述

一段输出两个list不同之处的代码,求大神解释

为什么代码中既有head,也有tail,他们两个是什么关系,各起到什么作用?求大神解释

Lnode * difference( Lnode *list1, Lnode *list2 )
{
Lnode *head = NULL;
Lnode *tail = NULL;
Lnode *new_node;
Lnode *copy_node;

// walk through both lists, adding nodes as necessary
while ( list1 != NULL || list2 != NULL ) {
  copy_node = NULL;
  if (   list1 != NULL && list2 != NULL
      && list1->data == list2->data ) {
    list1 = list1->next; // skip common nodes
    list2 = list2->next;
  }
  else if (    list1 != NULL
           &&( list2 == NULL || list1->data < list2->data )) {
    copy_node = list1;
    list1 = list1->next;
  }
  else if (    list2 != NULL
           &&( list1 == NULL || list2->data < list1->data )) {
    copy_node = list2;
    list2 = list2->next;
  }
  if( copy_node != NULL ) {
    new_node = (Lnode *)malloc(sizeof(Lnode));
    new_node->data = copy_node->data;
    if( head == NULL ) {
      head = new_node;
    }
    else {
      tail->next = new_node;
    }
    tail = new_node;
  }
}
return head;

}

解决方案

head是头节点,找到第一个不同的节点时,head指向它,即这个节点就是新产生的链表(2个链表的不同节点组成)的头节点
tail,是用来在链表尾插入新节点的

时间: 2025-01-25 09:00:19

链表-一段输出两个list不同之处的代码,求大神解释的相关文章

c语言链表代码求大神解释

问题描述 c语言链表代码求大神解释 insert中的 while( next_node && new_node->data > next_node->data) 是什么意思? 还有excise是什么意思,干什么用的? 最近在学链表,学不清楚... #include #include #include "list.h" /* Create a new node containing the specified data, and return a poi

代码 试题-一小段c++代码求大神教

问题描述 一小段c++代码求大神教 部分代码 Point f(double x, double y) { Point P(x,y); return P; } void main() { Point A(0,0); Point B = f(3,4); } Point是自定义的类 请问调用几次拷贝构造函数? 自己试过 .可是 vs调用了一次,vc调用了两次.哪个正确? 解决方案 1.应该是调用2次,vs调用一次,可能是Point A(0,0)被编译器优化掉了. 2.建议再main函数中添加对A进行访

java-读取个Excel文档,再根据条件输出到txt里,用Java写,求大神相助

问题描述 读取个Excel文档,再根据条件输出到txt里,用Java写,求大神相助 读取个Excel文档,再根据条件输出到txt里,怎么控制输出格式呢,希望大神帮忙,了啦啦啦啦啦! 解决方案 用poi吧,先读取excel表格数据,然后再写入到txt里面; 给你个案例你看看 public class CreateExcel { private static List getstudent() throws Exception{ List list=new ArrayList(); SimpleDa

jquery js 前端-var rdp = rdp = {};为什么声明需要用到两个=号;求大神解释一下,谢谢!!

问题描述 var rdp = rdp = {};为什么声明需要用到两个=号:求大神解释一下,谢谢!! 一般声明赋值一个变量,都只是一个=号,就像var rdp=5: 可是突然一下子两个=号,就困惑了:var rdp = rdp = {},求大神解答下, 最好能给举个例子,万分感谢!!!! 解决方案 js里面var a=b={}是定义两个变量a和b,并都初始化为{},是var a={}, b={}的简写.如果两个变量名相同,像你里面两个都是rdp就没必要了. 解决方案二: 你等号前后是同一个变量名

只能输入数字还有 - *两个符号的正则表达式怎么写,求大神帮忙

问题描述 只能输入数字还有 - *两个符号的正则表达式怎么写,求大神帮忙 只能输入数字还有 - *两个符号的正则表达式怎么写 啊,求大神帮忙 解决方案 [-*0-9]* 字符组 解决方案二: ^[d-*]+$

编程语言-我要用C++实现这段代码 求大神帮解释下R语言代码的意思

问题描述 我要用C++实现这段代码 求大神帮解释下R语言代码的意思 OrgData=read.csv("DownlinkPower_train.csv",header=T) TestData=read.csv("DownlinkPower_test.csv",header=T) #remove abnormal data, optional //移除异常数据 OrgData = subset(OrgData, OrgData[,1] > 0) TestData

c++-求大神解释这段代码,是什么意思!

问题描述 求大神解释这段代码,是什么意思! __field_bcount(cbData) PVOID lpData; 解决方案 这是一个宏, #define __field_bcount ( size ) __notnull __byte_writableTo(size) __field_bcount(cbData) PVOID lpData; //指向用户定义数据的指针} 解决方案二: 如果不看前半部分,PVOID lpData;是最简单的一个 VOID 型指针的定义语句.然后就是搞清楚 __

printf-求大神解释 double16位,为何输出的不是?

问题描述 求大神解释 double16位,为何输出的不是? #include"iostream" #include"cstdio" #include"cmath" using namespace std; int main() { double pi=4*atan(1.0); cout<<pi<<endl; printf("%lfn",pi); return 0; } 为什么输出的是 3.14159 3

c语言编写了个链表,但无法正确的输出,求大神指导

问题描述 c语言编写了个链表,但无法正确的输出,求大神指导 链表方面一直不是特别清楚.自己编了个链表,但却无法正确输出,求大神帮忙 #include #include typedef struct lnode Lnode; struct lnode { int data; Lnode *next; }; Lnode *makeNode(int data) { Lnode *new_node=(Lnode *)malloc(sizeof(Lnode)); if(new_node==NULL) {