一:单链表面试题
1.求单链表中有效节点的个数:
1 | public int getLength() |
2.查询单链表中倒数第k个节点
思路分析:
首先得知道链表的长度:int length = getLength();
计算倒数的个数和长度的差值+1就是求解的节点【为什么要+1,数组是从0开始】
开始遍历,找到第三个节点就行
1 | public void GetBackByOne(int k) |
3.单链表的反转:
自己的傻吊思路:
将整个链表读取出来,重新创建一个新的链表,重新赋值
代码如下:
1 | public void fanzhuan() |
大佬的思路:
1.先定义一个新的节点reverseHead=new HeroNode();
2.从头到尾遍历原来的链表,每遍历一个节点,并放在新的链表的最前端
3.原来的链表的head.next=reverseHead.next
代码如下:
1 | public void fanzhuan2(HeroNode head) |
4.从尾到头打印单链表
方式一:借助栈的特性,先进后出
1 | public void Print() |
方式二:
思路:
逆向打印单链表
- 先将单链表进行反正操作,然后在便利即可;【会破坏原链表的结构,不可取】参考上面3即可
5.合并两个有序的单链表,合并之后的链表依然有序
1 | public void hebing(SingleLinkedList reverseHead,ref SingleLinkedList reverseHead2) |