在刷题的时候顺便把涉及到知识复习整理到博客,慢慢把本地的笔记转移到博客上来
链表是有序的列表
链表是以节点的方式来存储,是链式存储每个节点包含 data域 next域:指向下一个节点链表的各个节点不一定是连续存储链表分带头节点和没有头节点的链表思路:
判断head.next是否为空 空返回0;初始化一个变量int length = 0;定义一个辅助变量cur = head.nextcur不为空(使用while) length++ cur指向cur的下一个节点cur为空返回length即可思路:
编写一个方法接收head 节点 同时接收index(表示倒数第index节点)链表从头到尾表里,得到链表的总的长度 getLength从链表的第一个开始遍历(总长度-index)个找到返回节点 否则返回null;思路:
先定义一个节点reverseHead = new ListNode();定义辅助指针(当前指针curr,下一个指针next),帮助遍历原来的链表从头到尾遍历原来的链表,每遍历一个链表,就将其取出,放在新的链表的最前端只要curr不为空 next=cur.next , curr.next=reverseHead.next, reverseHead.next.next=curr, cur=next原来链表的head.next=reverseHead.next这里把next想象成指针比较好理解(所有的题目先判断链表是否为空,空直接返回结果)
思路:
方式一: 反向遍历
见上一题,反转链表后遍历,这样做破坏原有链表结构方式二: Stack
判断列表为空的情况创建一个栈 Stack使用push方法把所有节点压入栈只要stack长度大于0,使用pop取出元素打印资料参考:尚硅谷