1. 链表反转
改变指针方向,将头结点改为尾节点。本次给出全部代码,后来只给部分代码
1 | class Node{ |
运行结果:
2 .链表从尾到头输出
直接递归,等到后来二叉树三种遍历也是这个思想
1 | public void printListReversely(Node plistHead){ |
输出结果:
3. 判断链表是否有环
定义两个指针,一个快指针,一个慢指针,两个指针同时移动,快指针每次移动两步,慢指针移动一步,每次都比较,直到快指针等于慢指针为止。(fast先到底部为null则为无环链表)
1 | public boolean Isloop(Node head){ |
4. 如何删除重复元素
对链表进行双重遍历
1 | public void deleteDuplecate(Node head){ |
运行结果:
9.4 如何找到倒数第k个元素
设置两个指针,一个正常从头到尾遍历,另一个先前移k-1步然后依次遍历,当这个快指针先到达尾部,则另一个指针的位置就是倒数第k个元素。
主函数:
输出结果:
9.5 判断两个链表是否相交
如果相交则有相同的尾节点
1 | public boolean isIntersect(Node h1,Node h2){ |
9.6 链表排序
1 | public Node orderlist() { |