链表笔试题
最近在刷面试题,以下是对链表面试题的总结:
1.从尾部到头部打印链表;
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。 主要有三种方法: (1)创建一个数组,遍历链表时,将链表值存入数组当中,遍历结束后,从尾部到头部遍历;时间复杂度o(n),空间复杂度o(n); (2)创建一个栈,遍历链表,将链表值压入栈中,遍历结束后,将栈中值压出;时间复杂度o(n),空间复杂度o(n); (3)采用递归的方式,将最先的数据最后打印;时间复杂度o(n),空间复杂度o(1); 注:方式(3)在链表比较长时,会出现方法次数执行太多,无法执行成功的情况; 2.链表反转; 给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头。主要有3种办法:
(1)创建一个栈,遍历链表,将链表值压入栈中,遍历结束后,将栈中的值压出,重新构建新链表;时间复杂度o(n),空间复杂度o(n);
(2)遍历链表,在遍历链表时,将链表进行反转;时间复杂度o(n),空间复杂度o(1);
(3)采用递归的方式,进行链表反转;