zoukankan      html  css  js  c++  java
  • 面试题目集锦--链表

          前段时间一直在忙着找工作,在面试中也遇到了大量的算法题目。当中。问的比較多的是二叉树和链表之类的题目。在这里。我就把前段时间写的链表面试题贴出来,当然,由于题目非常多。我仅仅是在这里贴出它的类构造,不贴出实现的代码,须要的朋友能够去这里下载(免积分):

    http://download.csdn.net/detail/dlutbrucezhang/8062413

          假设由于其它别的原因下载不下来的话,留下你的邮箱。我会给你传一份。

          好吧,以下贴出链表算法类:

    template <typename T>
    class dutNode
    {
    public :
    	T data;
    	dutNode<T>* next;
    
    	dutNode() : data(T()), next(NULL)	{}
    	dutNode(const T& _data) : data(_data)	{}
    	dutNode(const T& _data, dutNode<T>* _next) : data(_data), next(_next)	{}
    };
    
    template <typename T>
    class dutLinkList
    {
    private :
    	int count;
    	dutNode<T>* pHead;
    
    protected:		/*包裹函数*/
    	dutNode<T>*	dutRecursionReverseList(dutNode<T>*);
    	void		dutReversePrintList(dutNode<T>*);
    	void		dutQuickSortByPointer(dutNode<T>* &, dutNode<T>* &);
    	dutNode<T>* 	dutReverseOddAndEven(dutNode<T>*);
    	dutNode<T>* 	dutRecursionMergeSortedList(dutNode<T>*, dutNode<T>*);
    	dutNode<T>* 	dutNotRecursionMergeSortedList(dutNode<T>*, dutNode<T>*);
    	dutNode<T>* 	dutFindBackwardsK(dutNode<T>*, int);
    	dutNode<T>* 	dutFindMiddleElement(dutNode<T>*);
    	bool		dutHasCircle(dutLinkList<T>& ,dutNode<T>* &);
    
    	void		dutSwapData(T&, T&);
    
    public:
    	dutLinkList();
    	~dutLinkList();
    
    	/*normal operation*/
    	void		dutPrintList() const;
    
    	bool		dutIsEmpty() const;
    	int		dutGetCount() const;
    
    	int		dutAddToListByArray(const T*, int);
    	int		dutAddToHead(const T&);
    	int		dutAddToTail(const T&);
    	int		dutAddNodeToHead(dutNode<T>*);
    	int		dutAddNodeToTail(dutNode<T>*);
    	int		dutAddNodeAfterData(dutNode<T>*, T);
    
    	void		dutRemoveFirst();
    	void		dutRemoveTail();
    	void		dutRemoveAll();
    	void		dutRemoveData(const T&);
    
    	/*algotithm*/
    	bool		dutFindNodeByData(const T&) const;	/*链表中是否存在给定值*/
    	void		dutNotRecursionReverseList();		/*非递归翻转单链表*/
    	void		dutRecursionReverseList();			/*递归翻转单链表*/
    	void		dutReversePrintList();				/*倒序打印单链表*/
    	void		dutSelectSortByData();				/*通过交换数据对单链表运行选择排序*/
    	void		dutInsertSortByPointer();			/*通过交换指针对单链表运行插入排序*/
    	void		dutQuickSortByPointer();			/*通过交换指针对单链表运行高速排序*/
    	void		dutMergeList(dutLinkList<T>&);		/*合并单链表*/
    	void		dutNotRecursionMergeSortedList(dutLinkList<T>&);	/*非递归合并有序单链表*/
    	void		dutRecursionMergeSortedList(dutLinkList<T>&);		/*递归合并有序单链表*/
    	void		dutReverseOddAndEven();								/*翻转链表中奇数和偶数序号节点*/
    	void		dutSplitListMakeOddSeqBeforeEvenSeq();				/*切割单链表使得奇数序号位于偶数序号之前*/
    	void		dutSplitListMakeOddDataBeforeEvenData();			/*切割单链表使得奇数数据位于偶数数据之前*/
    	void		dutFindBackwardsK(int);								/*输出倒数第K个节点*/
    	void		dutFindMiddleElement();								/*输出中间节点*/
    	bool		dutHasCircle();										/*链表中是否存在环*/
    	bool		dutListIntersect(dutLinkList<T>&);					/*链表是否相交*/
    	bool		dutListHasCircleAndIntersect(dutLinkList<T>&);		/*链表是否有环且相交*/
    	void		dutFindLoopPort();									/*输出链表环的入口*/
    	void		dutFindTheFirstIntersectNode(dutLinkList<T>&);		/*输出相交链表的第一个相交节点*/
    };


  • 相关阅读:
    类和对象基础
    《Python》常用内置模块
    《Python》内置方法进阶和常用模块
    《Python》反射、内置方法(__str__,__repr__)
    《Python》 property、classmethod、staticmethod、isinstance、issubclass
    《Python》 面向对象三大特性之多态、封装
    面向对象三大特性之继承
    面向对象初识(组合)
    面向对象之入门-《初识》
    前端基础之jQuery操作标签
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5271235.html
Copyright © 2011-2022 走看看