c-连接两个链表
概述
还是相对简单,不过要记得释放不用的头结点即可.
代码为:
//将lList2头结点连接在lList1尾结点的后面.
void
combine(linklist lList1, linklist lList2) {
Linknode *lst01Tail = lList1; //最终指向lList1的尾结点.
Linknode *tmp; //临时指向lList2的头结点,用于释放lList2表的头结点.
while (lst01Tail->next) {
lst01Tail = lst01Tail->next;
} tmp = lList2;
lst01Tail->next = lList2->next; //lList1的尾结点连接lList2的首节点.
//释放释放lList2表的头结点.
free(tmp);
tmp = NULL;
lList1->data += lList2->data; //修改链表的长度.
}
完整代码:
#include <stdio.h>
#include <malloc.h> #define FALSE 0
#define TRUE 1 typedef struct node {
int data;
struct node *next;
} Linknode; typedef Linknode *linklist; //根据指定结点的个数,初始化一个带有头结点的单链表.
linklist
init(int n) {
linklist lList = (linklist)malloc(sizeof(struct node)); //头结点.
lList->next = NULL; //初始时链表为空.
lList->data = n; //头结点存储总元素个数.
if(!lList) {
printf("out of memory!\n");
return FALSE;
}
int i;
Linknode *tail = lList;
for(i = ; i < n; i++) {
Linknode * nNew = (Linknode *)malloc(sizeof(struct node));
if(!nNew) {
printf("out of memory!\n");
return FALSE;
}
nNew->data = i + ; //为新结点赋值.
//重新指定尾结点.
tail->next = nNew;
tail = nNew;
nNew->next = NULL;
}
return lList;
} //遍历单链表所有结点.
void
traverse(linklist lList) {
Linknode *node;
node = lList->next; //开始时指向第一个结点.
while(node) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
return;
} //将lList2头结点连接在lList1尾结点的后面.
void
combine(linklist lList1, linklist lList2) {
Linknode *lst01Tail = lList1; //最终指向lList1的尾结点.
Linknode *tmp; //临时指向lList2的头结点,用于释放lList2表的头结点.
while (lst01Tail->next) {
lst01Tail = lst01Tail->next;
} tmp = lList2;
lst01Tail->next = lList2->next; //lList1的尾结点连接lList2的首节点.
//释放释放lList2表的头结点.
free(tmp);
tmp = NULL;
lList1->data += lList2->data; //修改链表的长度.
} int
main(void) {
int n = ;
linklist lList = init(n);
linklist lList2 = init(n);
traverse(lList);
combine(lList, lList2);
traverse(lList);
printf("\n");
}
c-连接两个链表的更多相关文章
- 已有a,b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列
1.我的思路先将b链表连接在a链表的后面,这个很容易实现,将a链表最后的结点中的p.next改为指向b链表的头结点即可. 再将这个新链表用选择排序即可. 代码如下: #include<stdio ...
- 学习TensorFlow,concat连接两个(或多个)通道
深度学习中,我们经常要使用的技术之一,连接连个通道作为下一个网络层的输入,那么在tensorflow怎么来实现呢? 我查看了tensorflow的API,找到了这个函数: tf.concat(conc ...
- LeetCode 24——两两交换链表中的节点
1. 题目 2. 解答 新建一个哨兵结点作为头结点,然后每次交换相邻两个结点.并依次将它们连接到新链表中去,再将原链表中后面的结点也串到新链表后面.直至到达链尾或者剩余一个节点,则此时返回新链表的头结 ...
- 剑指offer36:两个链表的第一个公共结点
1 题目描述 输入两个链表,找出它们的第一个公共结点. 2 思路和方法 方法一: 用两个指针同时从两个链表的表头开始走,当走到自己的链表结尾的时候开始从另一个链表的表头开始向后走.终止条件就是两个指针 ...
- [LeetCode] Intersection of Two Linked Lists 求两个链表的交点
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- 剑指Offer面试题:31.两个链表的第一个公共节点
一.题目:两个链表的第一个公共节点 题目:输入两个链表,找出它们的第一个公共结点. 链表结点定义如下,这里使用C#语言描述: public class Node { public int key; p ...
- 剑指offer七:两个链表的第一个公共结点
输入两个链表,找出它们的第一个公共结点. import java.util.*; public class Solution { public ListNode FindFirstCommonNode ...
- JavaScript concat() 方法-连接两个或多个数组
一,定义和用法 concat() 方法用于连接两个或多个数组. 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 语法 arrayObject.concat(arrayX,arrayX,. ...
- 剑指Offer 两个链表的第一个公共结点
题目描述 输入两个链表,找出它们的第一个公共结点. 思路: 题目说的很笼统,应该是有2个链表,找出公共点,第一个公共点后面的链表是共同所有的.可以用map做,直接检测map里有没有出现这个节点. ...
- IT公司100题-7-判断两个链表是否相交
问题:有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环.1.如何判断一个链表是不是这类链表? 问题扩展:1.如果链表可能有环呢?2.如果需 ...
随机推荐
- 工作总结:MFC自写排序算法(升序)
最近一个需求里面需要实IP升序排序,用了qsort,结果是内部排序,甚至感觉排序结果不可预测性,于是自己写了一个外部排序. 需求如下:一个指针里面有N条记录,每条记录包含:IP,偏移地址,保留位,均占 ...
- [BZOJ 2326] [HNOI2011] 数学作业 【矩阵乘法】
题目链接:BZOJ - 2326 题目分析 数据范围达到了 10^18 ,显然需要矩阵乘法了! 可以发现,向数字尾部添加一个数字 x 的过程就是 Num = Num * 10^k + x .其中 k ...
- unity3d中的http通信
转载 http://blog.csdn.net/mfc11/article/details/8188785的博客,如果侵权,请留言我及时删除! 前言 Unity3d 是一个跨平台的引擎,在移动互联网浪 ...
- linux下so动态库一些不为人知的秘密(转)
linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识.基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库, ...
- Linux Kernel 本地拒绝服务漏洞
漏洞名称: Linux Kernel 本地拒绝服务漏洞 CNNVD编号: CNNVD-201308-090 发布时间: 2013-08-08 更新时间: 2013-08-08 危害等级: 漏洞类 ...
- WCF分布式事务
原文地址:http://developer.51cto.com/art/201002/185426.htm 我们作为一个开发人员,应该能够顺应技术的不断发展,不断的去掌握新技术.那么,对于WCF的掌握 ...
- NOI题库1799 最短前缀
1799:最短前缀 总时间限制: 1000ms 内存限制: 65536kB 描述 一个字符串的前缀是从该字符串的第一个字符起始的一个子串.例如 "carbon"的字串是: &quo ...
- 总结&计划
最近完成的事儿: 1. 看完了<c专家编程>并且整理了读书笔记 2. 看了半章<大数据>发现这本书里面是纯纯的干货...习题需要认真做,算法需要仔细体会...不适合突击,尤其是 ...
- Servlet工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
- C#中反射接受的字符串需要满足的Backus-Naur Form语法
MSDN的Specifying Fully Qualified Type Names指明了C#中反射接受的字符串需要满足如下的Backus-Naur Form语法. BNF grammar of fu ...