链表
文章平均质量分 74
石锅拌饭
新的博客在简书更新,欢迎阅读指正。
展开
-
输出链表倒数第K个结点
题目描述:输入一个单向链表,输出该链表中倒数第k个结点。分析:方法1:要输出链表中的倒数第K个结点,最自然的想法是先求出链表的长度N,然后从头遍历链表输出链表的第N-K+1个结点即可。注意本题数字从1计数,也就是说倒数第1个节点是链表最后一个结点。例如链表长度为4,需要输出倒数第2个结点,则我们只需要从头开始输出链表第3个结点即可。该思路代码如下:struct node原创 2012-08-17 15:26:43 · 4800 阅读 · 10 评论 -
链表逆序算法
问题:给定一个链表,请将其逆序。即如果链表原来为1->2->3->4->5->null,逆序后为5->4->3->2->1->null.解法1:迭代算法迭代算法效率较高,但是代码比递归算法略长。递归算法虽然代码量更少,但是难度也稍大,不细心容易写错。迭代算法的思想就是遍历链表,改变链表节点next指向,遍历完成,链表逆序也就完成了。代码如下:struct node {原创 2012-07-17 10:20:36 · 7209 阅读 · 0 评论 -
有序的循环链表中插入结点
题目给定一个有序的循环链表,在其中插入一个值,保持该循环链表依然有序。分析首先看下循环链表的结构,如下图所示为一个循环链表,其尾结点指向头结点,从而形成一个循环。给定的链表结点可以是链表任意一个结点,这个结点不一定是链表头结点,从而这也增加了该题的难度。此时若是要在链表中插入4,则插入后的链表如下所示:可以看到插入4后,链表依然有序。在解决这个问题前,先来看一个原创 2012-08-17 21:43:37 · 3869 阅读 · 0 评论 -
链表复制算法
问题已知一个简单链表,请复制链表并返回头结点指针。解法1:遍历算法从头开始遍历原链表,依次复制链表各个节点。结点定义如下:struct node { int data; struct node* next;};typedef struct node* pNode;创建新结点newNode代码:pNode newNode(int data)原创 2012-07-18 20:26:57 · 6736 阅读 · 0 评论 -
链表相交问题
题目:给定两个单向链表的头结点指针,比如为h1和h2,判断这两个链表是否相交。分析:一、先来分析链表不存在环的情况。编程之美和JULY的博文闲话链表追赶问题上对该题都有详述,拿来用了。1.直接循环判断第一个链表的每个节点是否在第二个链表中。但,这种方法的时间复杂度为O(Length(h1) * Length(h2))。显然,我们得找到一种更为有效的方法,至少不能原创 2012-08-17 20:09:13 · 1356 阅读 · 3 评论 -
链表合并算法
题目已知两个有序链表,试合并这两个链表,使得合并后的链表仍然有序(注:这两个链表没有公共结点,即不交叉)。分析既然两个链表都是有序的,所以合并它们跟合并两个有序数组没有多少区别,只是链表操作涉及到指针,不能大意。方法一:非递归方法使用2个指针list1和list2分别遍历两个链表,将较小值结点归并到结果链表中。如果有一个链表归并结束后另一个链表还有结点,则把另一个链表剩原创 2012-08-19 20:26:11 · 2193 阅读 · 0 评论 -
复杂链表的复制
原文地址:http://zhedahht.blog.163.com/blog/static/254111742010819104710337/题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下: struct ComplexNode{转载 2012-08-28 20:23:36 · 1188 阅读 · 0 评论 -
链表模拟加法问题
题目描述给定两个链表,每个链表的结点值为数字的各位上的数字,试求出两个链表所表示数字的和,并将结果以链表形式返回。链表的结点定义如下:typedef struct node *pNode;struct node{ int data; struct node *next;};题目有点拗口,请看一个例子:假定两个链表分别为list1和list2,list1各个结点值分别为原创 2012-09-14 11:36:04 · 1757 阅读 · 2 评论