链表反向

  顺序表是一种重要的数据结构,链表在很多地方有重要的运用。

  下面的简单程序用来将链表反向:

 1 listpointer invert(listpointer lead){
 2     listpointer middle,trail;
 3     middle=NULL;
 4     while(lead){
 5         trail=middle;
 6         middle=lead;
 7         lead=lead->link;
 8         middle->link=trail;
 9     }
10     return middle;
11 }

  具体过程如图示:

                                                          2016-10-22  16:35:45

时间: 2024-10-16 15:20:08

链表反向的相关文章

数据结构(三)之单链表反向查找

一.反向查找单链表 1.简单查找 先遍历获取单链表单长度n,然后通过计算得到倒数第k个元素的下标为n-k,然后查找下标为n-k的元素. 2.优化查找 先找到下标为k的元素为记录点p1,然后设置新的记录点p2的下标从0开始,同时遍历两个记录点,直到p1的值为null,p2是倒数第k个元素. 单链表结点: package cn.edu.scau.mk; /** * * @author MK * @param <T> */ public class Node<T> { private T

单链表反向查找

题目:已知一个带有附加头节点的单链表,节点结构为(data,link).假设该链表只给出了头指针first.在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第i个位置上的节点,若查找成功,算法返回该节点的地址:否则返回NULL. 分析:用一个指针p指向链表的首节点,另一个指针q找到链表正数第i个节点,然后平移指针p和指针q,当指针q指向链表最后一个节点时,指针p恰好指向链表倒数第i个节点.算法思路如下图(查找倒数第二个节点) 源码: template<class T> Link

链表反向输出

struct ListNode { int m_nKey; ListNode *m_pNext; }; void printListReversingly(ListNode *pHead) { stack<ListNode*> nodes; ListNode *pNode = pHead; while (pNode != NULL) { nodes.push(pNode); pNode = pNode->m_pNext; } while (!nodes.empty()) { pNode

单向链表

[链表] 是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer). 由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多, 但是查找一个节点或者访问特定编号的节点则需要O(n)的时间, 而顺序表相应的时间复杂度分别是O(㏒ n)和O(1).  [单向链表]  是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始   一个节点包含两个域,一个信息域和一个指针域,指针域指向下一个节点,

单向链表上是否有环

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt115 有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环. 问题: 1.如何判断一个链表是不是这类链表?2.如果链表为存在环,如果找到环的入口点? 解答: 1.最简单的方法, 用一个指针遍历链表, 每遇到一个节点就把他的内存地址(java中可以用object.hashcode())做为key放在一个hashtabl

leetCode 234. Palindrome Linked List 链表

234. Palindrome Linked List Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time and O(1) space? 题目大意: 判断一个单链表是否为回文链表. 思路: 找到链表中间的节点,将链表从中间分为2部分,右半部分进行链表反向转换,然后左半部分和反转后的右半部分链表进行比较.得出结果. 代码如下: /**  * Defi

如何检查一个单向链表上是否有环?

1, 最简单的方法, 用一个指针遍历链表, 每遇到一个节点就把他的内存地址(java中可以用object.hashcode())做为key放在一个hashtable中. 这样当hashtable中出现重复key的时候说明此链表上有环. 这个方法的时间复杂度为O(n), 空间同样为O(n). 2, 使用反转指针的方法, 每过一个节点就把该节点的指针反向: Boolean reverse(Node *head) { Node *curr = head; Node *next = head->next

IOS基础面试题

最近离职了,找工作,光会做项目,对基础不熟,今天就总结了一点面试题. 废话不多说,上题吧: 1.objective-c中的数字对象都有哪些,简述它们与基本数据类型的区别是什么. 基本类型和C一样,主要是有int.long.double.float.char.void.bool.对于基本数据类型,不需要使用指针,NSNumber是OC的数字对象,需要考虑内存释放问题.数字类型有:NSInteger.CGFloat.数据对象有NSNumber.对象和变量的差别.可以拆装效果.其他的类型有NSStri

C++标准模板库学习。。。

作为C++标准库相当重要的一部分,STL库提供一系列组件操作.它主要可以分为容器.迭代器.基本算法.函数对象以及内存分配器和配接器六个部分.整个STL库的代码都采用模板函数以及模板类的方式实现,具有高度的通用性.对于传统的应用程序来讲,模板库支持并且倡导一种新的编程风格,即称为泛型编程思想,以通用的模板方式来编写应用程序中的数据结构与算法. 16.1  STL常见容器 C++标准STL库中封装实现了常见数据结构,并以容器的方式提供给用户使用.STL容器主要包含vector向量.deque队列.l