当前位置: 首页 > news >正文

网站加载等待udacity 网站开发

网站加载等待,udacity 网站开发,十大团购网站,银川商城网站建设链表是最基本的数据结构#xff0c;凡是学计算机的必须的掌握的#xff0c;在面试的时候经常被问到#xff0c;关于链表的实现#xff0c;百度一下就知道了。在此可以讨论一下与链表相关的练习题。 1、在单链表上插入一个元素#xff0c;要求时间复杂度为O(1) 解答#x… 链表是最基本的数据结构凡是学计算机的必须的掌握的在面试的时候经常被问到关于链表的实现百度一下就知道了。在此可以讨论一下与链表相关的练习题。 1、在单链表上插入一个元素要求时间复杂度为O(1) 解答一般情况在链表中插入一元素是在末尾插入的这样需要从头遍历一次链表找到末尾时间为O(n)。要在O(1)时间插入一个新节点可以考虑每次在头节点后面插入即每次插入的节点成为链表的第一个节点。 2、给定一个链表判断是否有环。 解答这个是一个经典的问题了思路也很简单我们首先设置两个指针p1p2同时指向链表的头部然后p1每次向后走1步p2每次向后走2步。如果有环那么有一步会出现p1p2如果p2已经到达了尾结点则无环。复杂度时间O(n)空间O(1) 扩展给定一个链表找出环的入口位置。思路也是一样用p1,p2指针。只是需要多做一步那就是当p1p2的时候将p1重新指向链表的头结点然后p1和p2都每次向后走一步下一次p1p2的结点就是环的入口。复杂度时间O(n)空间O(1) 3、遍历单链表一次找出链表中间节点 解答定义两个指针p和q初始都指向链表头节点。然后开始向后遍历p每次移动2步q移动一步当p到达末尾的时候p正好到达了中间位置。 4、单链表逆置不允许额外分配存储空间不允许递归可以使用临时变量执行时间为O(n) 解答这个题目在面试笔试中经常碰到基本思想上将指针逆置。如下图所示 实现 Node* reverse_list(Node *head){Node *curhead;Node *pre NULL;Node *post cur-next; span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// Node *reverse_head cur;/spanspan classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(post){cur-next pre;pre cur;cur post;post post-next;}cur-next pre; span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// reverse_head cur;/spanspan classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span cur; } 扩展链表翻转。给出一个链表和一个数k比如链表为1→2→3→4→5→6k2则翻转后2→1→6→5→4→3若k3翻转后3→2→1→6→5→4若k4翻转后4→3→2→1→6→5用程序实现。 实质是也是逆置只不过是两个链表逆置后再串联起来。实现如下 span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;bool/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;rotate_list/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(Node *head,span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span k,Node* newhead)/span/span{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(k span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;0/span)span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;false/span;span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;if/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(0 k)/spanreturn span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;true/span/span;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span len span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;0/span;Node *nodehead;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(node){len;node node-next;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(k len)span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;false/span;Node *one_end,*two_start;node head;Node *post node-next;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span nk;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span n){}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/span{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(n span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span){span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// rotate sublist one/spannode-next post-next;post-next head;head post;post node-next;--n;}}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(len-k span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span){ span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// rotate sublist two/span}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/span{one_end node;node post;post post-next;two_start node;n len-k;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(nspan classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span){one_end-next post;node-next post-next;post-next two_start;two_start post;post node-next;--n;}}newhead head;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;true/span; }5、用一个单链表L实现一个栈要求push和pop的操作时间为O(1) 解答根据栈中元素先进后出的特点可以在链表的头部进行插入和删除操作 6、用一个单链表L实现一个队列要求enqueue和dequeue的操作时间为O(1) 解答队列中的元素是先进先出在单链表结构中增加一个尾指针数据从尾部入队从头 部入队。 7、给定两个链表无环判断是否有相交。 解答首先明确一点如果两个链表相交那么从第一个交点开始到尾结点结束所有的结点都是公共结点。所以两个有公共结点而部分重合的链表拓扑形状看起来像一个Y而不可能像X。 这也就是说如果两个链表相交那么这两个链表的尾结点肯定是公共结点如果尾结点不是公共结点那么这两个链表肯定不相交。 所以我们可以如下操作依次遍历两个链表最后判断尾结点是否相同如果相同则相交如果不相同则不相交。复杂度时间O(mn)空间O(1) 或者一个链表的头结点指向另一个链表的尾节点判断是否有环。 8、给定两个链表无环找到第一个公共节点。 解答我们最容易想到的是从尾结点开始挨个向前比较最后一个相同的就是第一个公共结点。从后往前遍历 但是单链表只能从前往后进行遍历如果想要从后往前的话则需要先从前向后遍历一次同时用栈来记录每一个结点最后出栈然后挨个对比这样的确可行但是却要额外付出O(mn)的空间时间复杂度O(mn)。单链表栈 仔细想想我们可以先分别遍历两个单链表记录长度m和n无妨假设mn然后先让长度为m的链表向后走(m-n)步接着两个链表同时向后遍历第一个相同的结点就是要求的第一个公共结点。复杂度O(mn)m,n分别为两个链表的长度空间O(1) PS另外还有一种巧妙的方法是把在一个链表尾部插入另一个链表然后判断合成的新链表是否有环。环入口即为第一个公共点。 可参考http://www.voidcn.com/blog/wcyoot/article/p-2762597.html 扩展两个链表找出他们的第一个交点要求每个链表只能遍历一次可以对链表进行任何操作空间O(1). 题目告诉说可以对链表进行任何操作这是一个没有用到的条件大家一定要注意到题目中没有用到的条件往往是解题的关键所在。 1.遍历第一个链表List1将每一个节点的next都置为NULL。 2.遍历第二个链表List2List2的尾节点就是第一个交点。 9、 给定2个链表求这2个链表的并集(链表)和交集(链表)。不要求并集(链表)和交集(链表)中的元素有序。输入List1:10-15-4-20List2:8-4-2-10输出交集(链表)4-10并集(链表)2-8-20-4-15-10 法一简单直观的方法 InterSection(list1,list2):初始化结果链表为空遍历链表1在链表2中查找它的每一元素如果链表2中也有这个元素则将该元素插入到结果链表中。 Union(list1,list2): 初始化结果链表为空将链表1中的所有元素都插入到结果链表中。遍历链表2如果结果链表中没有该元素则插入否则跳过该元素。 法二可适应归并排序not clear。 法三Hash法 Union(list1,list2)首先用链表1初始化结果链表创建一个空的hash表。遍历链表1将链表中的元素插入到hash表。然后遍历list2对于list2中的元素如果hash表中不存在该元素则同时将该元素插入到结果链表中如果hash表中已经存在则忽略该元素继续遍历下一个元素。 InterSection(list1,list2)首先初始化结果链表为NULL创建一个空的hash表。遍历list1将list1中的每一个元素都插入到hash表中。然后遍历list2对于list2中的元素如果已经存在于hash表中则将该元素插入到结果链表如果不存在与hash表中则忽略该元素继续遍历下一个元素。 参考http://blog.csdn.net/lalor/article/details/7430631 10、从单链表返回倒数第n个元素 普通基本思路就是用栈一一压栈再弹栈第n个元素就可出来。 进阶看到栈就应该想到递归递归是天然的栈。用全局变量实现如下 Node* pn_elem NULL; span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span nn; span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;void/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;recursive/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(Node* node)/span/span{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(!node) span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span ;recursive(node-next);span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/spannn) pn_elem node;--nn; }高级维护两个指针两个指针相差n个元素当前面的指针到达链表末尾后面指针所指的元素即是所求的元素。实现如下 Node* last_n_elem(Node*node,span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span n){span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(node! || nspan classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span) returnNULL;Node *pnode,*qnode;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(nspan classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;0/span q){qq-next;--n;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(q){qq-next;pp-next;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span p; }11、链表元素去重从未排序的链表中移除重复的项。 思路可使用额外的空间的话可以用数组存数字实现最好的方式就是哈希表啦。遍历一下即可。 实现 std::span classhljs-stl_container styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;map/spanNode*, span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;bool/span/spanhash; span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;void/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;duplicate_remove/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(Node *node)/span/span{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(!node) span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span ;Node *postnode-next;hash[node-data] span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;true/span;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(post){span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(hash[post-data]){Node *temp post;post post-next;node-next post;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;delete/span temp;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/span{hash[post-data] span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;true/span;node post;post post-next;}} }如果不允许使用临时缓存怎么解决 思路用两个指针。当某个指针指向某个元素时另一个指针将后面的相同元素全部删除。复杂度O(n^2)。具体实现就不写了。 12、链表求和问题。 该问题基本上有两个类型 a、1-2-5-4 , 2-5-3-4,得3-7-8-8. 思路先加高位再加低位。两个0~9的数相加要么不进位要么进位为1.用两个指针p指向当前进位点q指向当前操作点。当然第一个元素得特殊考虑可能进位嘛。 自己实现 Node* merge_list_add(Node *list1,Node *list2){Node*q1list1,*q2list2,*ansNULL,*preNULL,*pNULL,*qNULL;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span cvalue q1-data q2-data;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;bool/span flag span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;false/span;ans span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;new/span Node();span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// node 1/spanspan classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(cvalue span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;9/span){ span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//进位/spanpre span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;new/span Node();pre-data cvalue%span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;10/span;ans-next pre;ans-data span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span;ppre;}span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;if/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(9 cvalue)/span/span{span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//最高位为9/spanflag span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;true/span;ans-data cvalue;pre ans;ppre;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/span{ans-data cvalue;p pre ans;}q1q1-next;q2q2-next;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(q1 q2){span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// the following node/spanq span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;new/span Node();pre-next q;cvalue q1-data q2-data;q-data cvalue%span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;10/span;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(cvalue span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;9/span ){span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(flag){span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(p ! ans){p-data span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/span{span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//999...[],前面全是9/spanNode*temp span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;new/span Node();temp-data span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span;temp-next ans;flag span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;false/span;ans temp;p ans;}}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/span{p-data span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;for/span(pp-next;p!q;pp-next){p-data span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;0/span;}}span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;if/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(cvalue 9)/span/span{p q;}pre q;q1q1-next;q2q2-next;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span ans; } 参考http://hawstein.com/posts/add-singly-linked-list.html,第二种实现不错 b、 元素个数不一定相同高位在后个位在链表头结点。1-2-3 , 4-5-3-4得5-7-6-4. 思路需要注意的是链表为空有进位链表长度不一样。 span classhljs-preprocessor styleborder: 0px; margin: 0px; padding: 0px; font-weight: bold; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(153, 153, 153); background: transparent;#span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;include/span assert.h/span span classhljs-preprocessor styleborder: 0px; margin: 0px; padding: 0px; font-weight: bold; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(153, 153, 153); background: transparent;#span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;include/span iostream/span span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;using/span span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;namespace/span span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;std/span; span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;struct/span Node{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span data;Node *next; }; Node* create_list(span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span arr[],span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span len){assert(arr lenspan classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;0/span);Node *head span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;new/span Node();head-data arr[span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;0/span];Node *curNULL;Node *prehead;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;for/span(span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span ispan classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span;ilen;i){cur span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;new/span Node();cur-data arr[i];pre-next cur;pre cur;}cur-next NULL;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span head; } Node* merge_list_add(Node *list1,Node *list2){span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(NULL list1) returnlist2;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(NULL list2) returnlist1;Node *ansNULL,*preNULL;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span cspan classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;0/span;span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//进位/spanspan classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span value span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;0/span;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(list1 list2){value list1-data list2-data c;Node* temp newNode();temp-data value%span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;10/span;c value/span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;10/span;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(pre){pre-next temp;pre temp;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/spananspretemp;list2 list2-next;list1 list1-next;} span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(!list1 !list2 cspan classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;0/span){span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//两个链表长度一样但有进位/spanNode* temp newNode();temp-data span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span;temp-next NULL;span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//结束/spanpre-next temp;}span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//有一个链表更长/spanspan classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(list1){value list1-data c;Node* temp newNode();temp-data value%span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;10/span;c value/span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;10/span;pre-next temp;pre temp;list1 list1-next; }span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(list2){value list2-data c;Node* temp newNode();temp-data value%span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;10/span;c value/span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;10/span;pre-next temp;pre temp;list2 list2-next; }pre-next NULL;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span ans; } span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;main/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;()/span/span{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span a[]{span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span,span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;2/span,span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;7/span};span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span b[]{span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;4/span,span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;5/span,span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;3/span,span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;9/span,span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;3/span};span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//此处应该加个判断保证数组元素均在[0,9]/spanNode* lista create_list(a,span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;3/span);Node* listb create_list(b,span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;5/span);Node* cur lista;span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;cout/spanspan classhljs-string styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;list a:/span;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(cur ! NULL){span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;cout/spancur-dataspan classhljs-string styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;/span;cur cur-next;}cur listb;span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;cout/spanendlspan classhljs-string styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;listb: /span;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(cur ! NULL){span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;cout/spancur-dataspan classhljs-string styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;/span;cur cur-next;}span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;cout/spanendl;Node *ans merge_list_add(lista, listb);span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;for/span(; ans; ansans-next)span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;cout/spanans-dataspan classhljs-string styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent; /span;span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;cout/spanendl; } 13、用算法实现删除链表的一个中间节点所知的只有该节点的指针。如a-b-c-d-e中只知道c的指针实现a-b-d-e。 思路若直接删除的话链表就断了可是无法得到节点c的前驱b。故可转换思路利用c的后继d。将d的值赋给c 然后将后继节点d删除也就实现删除操作。 由于c的位置不定得分情况讨论。一、c为普通的中间节点用上述方式解决。二c为头节点用上述方式解决。三、c为尾节点一般认为删除即可但是会出现问题。删除之后尾节点的前驱不为空下次遍历就会出错特别注意。四、c为空节点直接返回。 实现 span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;bool/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;remove_elem/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(Node* node)/span/span{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(!node || !node-next) returnfalse;Node *post node-next;node-data post-data;node-next post-next;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;delete/span post;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;true/span; } 扩展 a、Google题目给定单向链表的头指针和一个结点指针定义一个函数在O(1)时间删除该结点。 思路跟前面的一致同样要注意尾节点。 b、只给定单链表中某个结点p(非空结点)在p前面插入一个结点。 思路首先分配一个结点q将q插入在p后接下来将p中的数据copy入q中 然后再将要插入的数据记录在p中。 14、环链表开始节点1-2-5-4-2 思路 1、        用快慢指针满指针1快指针2。 我们注意到第一次相遇时指针走过的路程S1 非环部分长度 弧A长 快指针走过的路程S2 非环部分长度 n * 环长 弧A长 S1 * 2 S2可得 非环部分长度 n * 环长 - 弧A长 让指针1到起始点后走过一个非环部分长度指针2过了相等的长度。 就是n * 环长 - 弧A长正好回到环的开头。 或者参考http://blog.csdn.net/lalor/article/details/7628332 2、     更简单直观的方法就是利用哈希表。无环的话每个地址就是不一样有环的话两个地址一样的就是环开始节点。下面用c的map实现 std::mapNode*, boolhash; Node* loop_start(Node* node){ while(node){ if(hash(node))  return node; else{ hash(node) true; node node-next; } } return NULL; //return head ;  same } 15、如何知道环的长度 一、在环上相遇后记录第一次相遇点为pos之后指针slow继续每次走1步fast每次走2步。在下次相遇的时候fast比slow正好又多走了一圈也就是多走的距离等于环长。 设从第一次相遇到第二次相遇设slow走了len步则fast走了2*len步相遇时多走了一圈环长2*len-len。 二、利用哈希表即两个碰撞元素间的个数 16、输入一个链表的头结点从尾到头反过来打印出每个结点的值。 思路用栈实现。 进阶用递归。实现如下 span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;void/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;PrintListReversingly/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(ListNode*pHead)/span/span{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(pHead ! NULL){span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(pHead-m_pNext ! NULL){PrintListReversingly(pHead-m_pNext);}span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;printf/span(span classhljs-string styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;%d\t/span,pHead-m_nValue);} } 注意但使用递归就意味着可能发生栈溢出的风险尤其是链表非常长的时候。所以基于循环实现的栈的鲁棒性要好一些。 17、输入两个递增链表合并为一个递增链表。 思路遍历两个链表依次比较形成新的队列 进阶递归每次递归返回合并后新链表的头结点 list_node*List::recursive_merge(list_node * a,list_node * b){span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(a NULL)span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span b;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(b NULL)span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span a;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(a-value b-value){a-nextrecursive_merge(a-next,b);span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span a;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(a-value b-value){b-nextrecursive_merge(a,b-next);span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span b;} }18、用链表实现约瑟夫环 这里就不实现了。 19、判断一条单向链表是不是“回文”1-2-4-2-1 思路对于单链表结构可以用两个指针从两端或者中间遍历并判断对应字符是否相等。但这里的关键就是如何朝两个方向遍历。 由于单链表是单向的所以要向两 个方向遍历的话可以采取经典的快慢指针的方法即定位到链表的中间位置再将链表的后半逆置最后用两个指针同时从链表头部和中间开始同时遍历并比较即可。 实现注意链表元素的奇偶性稍微不同 span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;bool/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;is_list_plalindrome/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(Node*head)/span/span{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(!head)span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;false/span;Node *onehead,*twohead,*preNULL;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(two!NULL two-next!NULL){preone;one one-next;two two-next-next;}span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//if length of list is odd, mid/spanNode *subheadNULL,*nodeNULL,*postNULL;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(!two){ span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//even,twoNULL/spansubhead one;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/span{ span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//odd/spansubheadone-next;}nodesubhead;postnode-next;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(node-next){span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// rotate sublist 旋转的这种写法很容易理解/spannode-next post-next;post-next subhead;subhead post;post node-next;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;for/span(Node*phead,*qsubhead;p!pre-next;pp-next,qq-next){span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(p-data!q-data)span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;false/span;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;true/span; }20、从尾到头输出链表。 题目输入一个链表的头结点从尾到头反过来输出每个结点的值。 思路跟输出倒数第n个元素的方法类似。 方法一、先把链表反向然后再从头到尾遍历一遍。但该方法需要额外的操作 方法二、设一个栈从头到尾遍历一次把结点值压力栈中再出栈打印。 方法三、递归。 实现 span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;void/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;list_out_reverse/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(Node*head)/span/span{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(!head)span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span;span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/spanspan classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;list_out_reverse/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(head-next)/span/span;span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;cout/spanhead-dataspan classhljs-string styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent; /span; }扩展该题还有两个常见的变体 1. 从尾到头输出一个字符串 2. 定义一个函数求字符串的长度要求该函数体内不能声明任何变量。 两个的分别实现 span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;void/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;reverseString/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(conststring s,span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;unsigned/span span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span begin)/span/span{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(!s.size())span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(begins.size())span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span;reverseString(s,beginspan classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span);span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;cout/spans[begin]span classhljs-string styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent; /span; }span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;getLength/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;const/span span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;char/span *s)/span/span{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(*sspan classhljs-string styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;/0/span)span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;0/span;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span getLength(sspan classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span) span classhljs-number styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;1/span; } 21、链表和数组的区别 分析主要在基本概念上的理解。但是最好能考虑的全面一点现在公司招人的竞争可能就在细节上产生谁比较仔细谁获胜的机会就大。 数组无需初始化因为数组的元素在内存的栈区系统自动申请空间。而链表的结点元素在内存的堆区每个元素须手动申请空间如malloc。也就是说数组是静态分配内存而链表是动态分配内存。链表如此麻烦为何还要用链表呢数组不能完全代替链表吗回到这个问题只需想想我们当初是怎么完成学生信息管理系统的。为何那时候要用链表因为学生管理系统中的插入删除等操作都很灵活而数组则大小固定也无法灵活高效的插入删除。 数组是线性结构静态分配内存在内存中连续数组元素在栈区。可以直接索引时间复杂度O(1)。数组插入或删除元素比较困难时间复杂度O(n)。 链表也是线性结构动态分配内存在内存中不连续链表元素在堆区。元素的定位均需遍历时间复杂度O(n)。链表插入或删除元素操作灵活性强时间复杂度O(1)。 22、编写实现链表排序的一种算法。说明为什么你会选择用这样的方法 思路如果只是数据内容之间的相互交换那么这种排序方法也比较适合链表的排序插入、冒泡、希尔和选择排序。快速排序、合并排序、堆排序都涉及到了中间值的选取问题所以不大适合链表排序。 选择排序的实现 Node* insert_sort(Node *head){span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(!head ||!head-next)span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span head;Node *p,*q,*pre,*temp;phead-next;head-nextNULL;span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// p is the head of unsorted list/spanspan classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// head is the head of sorted list/spanspan classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(p){qhead;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(q (q-data p-data)){preq;qq-next;}temp p-next;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(qhead){p-next q;head p;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;else/span{pre-nextp;p-next q;}ptemp;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span head; }其他排序参考http://www.voidcn.com/blog/Hackbuteer1/article/p-999842.html http://wenku.baidu.com/link?urlCxhR7E5PGrEwRU5eKu_3xX5EvZ6MP-7GhRLhAfoQFThh5HxlQ5SgIxdfRPVXRO-oeCkwFYFqLJJezeswxdOmRE4W_QJBY3iS4Xpot23XCPi 23、复杂链表的复制默认无环 Q:有一个复杂链表其结点除了有一个m_pNext指针指向下一个结点外还有一个m_pSibling指向链表中的任一结点或者NULL。请完成函数ComplexNode* Clone(ComplexNode* pHead)以复制一个复杂链表。 一开始想这道题毫无思路如果蛮来首先创建好正常的链表然后考虑sibling这个分量则需要O(n^2)的时间复杂度。 思路一 一般复制一个简单链表就这么遍历一遍就好了这个复杂链表比简单链表多的地方就在于多了一个sibling的指针也就是说在建立完简单链表之后如何在新的链表中找到sibling对应的地址。我们已知的是旧的节点的地址所以只需要用一个map保存每一个节点旧的节点对应的新的节点的地址即可。即将原链表中的结点N和相应复制结点N建立哈希映射N,N 第一次遍历建立简单节点第二次遍历对于旧链表中的每一个节点的sibling指针地址从map中找到新链表中对应节点的地址连接上就好了。 实现不错的实现学习 ComplexNode* Clone(ComplexNode*pHead){span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(pHead NULL) span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span NULL;span classhljs-stl_container styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-built_in styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;map/spanComplexNode*, ComplexNode*/spanpointMap;ComplexNode* newHead,*tail; span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// newHead指向复制的新链表的开头tail始终指向结尾/spanspan classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// 开辟一个头结点/spannewHead span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;new/span ComplexNode;newHead-value pHead-value;newHead-pNext NULL;newHead-pSibling NULL;pointMap[pHead] newHead; span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// 将头结点放入map中/spantail newHead;ComplexNode *p pHead-pNext;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(p ! NULL){ span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// 第一遍先将简单链表复制一下/spanComplexNode* newNode span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;new/span ComplexNode;newNode-value p-value;newNode-pNext NULL;newNode-pSibling NULL;tail-pNext newNode;tail newNode;pointMap[p] newNode;p p-pNext;}span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;// 根据map中保存的数据找到对应的节点/spanp pHead;tail newHead;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(p!NULL){span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(p-pSibling!NULL){tail-pSibling pointMap.find(p-pSibling)-second;span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//Key找N对应的N’/span}p p-pNext;tail tail-pNext;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span newHead;} 思路二精妙一个技巧便可以巧妙的解答此题。看图便知。 首先是原始的链表 然后我们还是首先复制每一个结点N为N*不同的是我们将N*让在对应的N后面即为 然后我们要确定每一个N*的sibling分量非常明显N的sibling分量的next就是N*的sibling分量。 最后将整个链表拆分成原始链表和拷贝出的链表。 这样我们就解决了一个看似非常混乱和复杂的问题。 实现 span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;struct/span Node{span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;int/span val;Node* next;Node*sibling; }; span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;void/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;Clone/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(Node* head)/span/span{Node*currenthead;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(current){Node*tempspan classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;new/span Node;temp-valcurrent-val;temp-nextcurrent-next;temp-siblingNULL;current-nexttemp;currenttemp-next;} } span classhljs-function styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; background: transparent;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;void/span span classhljs-title styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(25, 70, 157); background: transparent;ConstructSibling/spanspan classhljs-params styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 0, 255); background: transparent;(Node*head)/span/span{Node*originhead;Node*clone;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(origin){cloneorigin-next;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(origin-sibling)clone-siblingorigin-sibling-next;originclone-next;} }Node* Split(Node* head){Node*CloneHead,*clone,*origin;originhead;span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;if/span(origin){CloneHeadorigin-next;origin-nextCloneHead-next;originCloneHead-next;cloneCloneHead;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;while/span(origin){Node*temporigin-next;origin-nexttemp-next;originorigin-next;clone-nexttemp;clonetemp;}span classhljs-keyword styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;return/span CloneHead; } span classhljs-comment styleborder: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;//the whole thing/span Clone(head); ConstructSibling(head); pSplit(head);/pp /pp转载自http://www.voidcn.com/blog/ywok526/article/p-2520659.html/p
http://wiki.neutronadmin.com/news/172280/

相关文章:

  • 东莞常平有什么好玩的赣州seo培训
  • 福田搭建网站费用网站开发有什么职位
  • 徐州网站开发兼职哪里购买网站广告位
  • 网站域名在哪里备案网站是用织梦系统做的首页打开超慢
  • 帝国cms是个人网站网络营销方法分析
  • 大学网站策划方案vs如何做网站
  • 3.0效果网站建设多少钱东莞做网站有哪些
  • 成都高端模板建站汕头网站开发找哪里
  • 网站做外链的方式快速搭建网站wordpress
  • 第二季企业网站开发wordpress内核
  • 康定网站建设工作室中国工程建设标准化协会网站
  • 兴化建设局网站美橙互联
  • 怎么在百度上能搜到自己的网站为什么凡科网做的网站无法搜索
  • 做网站的用多少钱西安营销型网站制作
  • 怎样在百度做网站官方商城下载
  • 网站运营与网络推广方案wordpress仿腾讯
  • php网站开发岗位要求asp.net网站开发期末复习题
  • 咖啡厅网站开发目标做国外网站需要多少钱
  • 网站建设 图片问题网站策划方案800字
  • 华容网站做网站美工收费
  • 增加网站收录杭州网站制作方法
  • 商城型企业网站的功能wordpress转移域名
  • 深圳网站建设报价网站开发非常之旅:ajax从入门到精通 pdf
  • 湖南网站建设小公司wordpress网络报名系统
  • 建设电商网站需要什么硬件佛山网站建设找哪家
  • 设计网站如何推广网站的数据库怎么备份
  • 做网站一般多少盗版视频网站怎么做
  • 网站域名的作用搞外贸一般是干什么的
  • 一站式网站建设顾问男科医院网站开发策划
  • 如何创建自己的网站链接已有网站备案更换idc 多久