
算法设计与分析
德哥是程序员
java开发工程师
展开
-
排序好的两个链表的合并
将来个排好序的链表合并为一个链表,使用一个临时指针,接着使用两个指向两个链表的头的指针,然后比较这两个链表节点的数据大小,临时指针指向小的节点,更新指向小的链表头的指针使其指向下一个节点。重复此过程直到其中一个链表遍历完毕,另一个没有遍历完的链表插到链表尾即可实现两个链表的合并。具体的实现代码如下: //此程序用于实现两个排好序的链表的合并 #include<iostream> #include<stdlib.h> struct LinkNode { int val; LinkN原创 2020-07-23 22:18:10 · 192 阅读 · 0 评论 -
链表的中间段逆置(不申请新的空间)
链表的中间段逆置跟链表的逆置的核心思想是一致的,只不过链表的中间段逆置不一定是从头结点开始逆置或者不一定逆置到链表的最后一个节点,即只逆置中间的一部分结点。实现链表的中间段逆置,要找到逆置段的开始节点、该节点的前驱元、逆置段的尾节点、逆置段尾节点的后一个节点,在逆置中间段用就地逆置法或者头插法实现中间段逆置,然后逆置段的前一段、逆置段、逆置段的后一段连接起来,这样就是实现了链表中间段的逆置。 下面用7个节点的链表演示具体的过程 以上过程的代码实现如下: //实现链表的中间段逆置 #include<i原创 2020-07-19 00:13:50 · 394 阅读 · 0 评论 -
使用头插法实现链表逆序
用头插法实现链表逆序,本质上跟使用就地插解法(或者就地逆置法)的思想是一致的,只不过头插法就是使用一个新的头结点代替新的链表头指针来实现链表的逆序,这里以五个节点的链表为例,来实现该方法,具体的代码如下: //用头插法实现列表逆序 #include<iostream> struct ListNode { int value; ListNode* nextNode; ListNode(int x) :value(x), nextNode(NULL) { } }; void printList原创 2020-07-18 21:07:10 · 1108 阅读 · 0 评论 -
用就地插解法实现链表逆序(不可额外申请空间)
用就地插解法实现链表逆序,且不可额外申请空间,就本人的理解来看,关键是要处理好个链表节点指针间的关系。用两个头结点指针,一个指向原链表,一个指向新的链表,初始化为NULL指针,再用一个指向下一个结点的临时指针,然后一个一个地将链表结点逆序即可。这里以int型的5个节点的链表为例进行说明,具体的操作如下: 具体的代码实现如下: //不可额外申请空间 //就地插解法 #include<iostream> struct ListNode { int value; ListNode* nextNo原创 2020-07-18 20:02:38 · 232 阅读 · 0 评论