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.如果需 ...
随机推荐
- struts2令牌,防止重复提交
struts2的令牌,可以用来防止重复提交,其原理是在提交jsp页面中,写入一个隐藏域name="token",然后在action中定义一个变量token并get.set.在服务器 ...
- SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE locks在RR模式下可以看到最新的记录
14.5.2.4 Locking Reads 锁定读: 如果你查询数据然后插入或者修改相关数据在相同的事务里, 常规的SELECT 语句不能给予足够的保护. 其他事务可以修改或者删除你刚查询相同的记录 ...
- 【HDOJ】1903 Exchange Rates
水DP.精度很坑. /* hdoj 1903 */ #include <cstdio> #include <cstring> #include <cstdlib> ...
- 1B. Spreadsheets
题目大意: 行和列的两种方式. A是1, B是2,....Z是26, AA是27, AB是28........... 如: BC23代表55列23行 还有一种表示方法:R23C55, 代表23行,55 ...
- Linux系统下UDP发送和接收广播消息小例子
// 发送端 #include <iostream> #include <stdio.h> #include <sys/socket.h> #include < ...
- Missing Number ——LeetCode
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...
- [Locked] Inorder Successor in BST
Inorder Successor in BST Given a binary search tree and a node in it, find the in-order successor of ...
- JQuery实现悬浮工具条
实现效果如下 html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...
- SVM原理(1)
SVM即支持向量机,是一种机器学习内的二类分类方法,是有监督学习方法. 首先我们需要建立一个分类任务: 首先考虑线性可分的情况:(所谓线性可分就是在N维空间上的两类点,可以用N-1个未知数的函数(超平 ...
- WebService-通俗讲解
一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成 分.但是不得不承认的是W ...