左程云著算法与数据结构题目最优解笔记-链表
2017-04-18 23:03
429 查看
链表
链表是面试时被提及最频繁的数据结构。链表就是通过指针将一个个节点连接起来。链表是非连续的动态内存空间,链表的查找比数组慢,但是添加和删除比数组快。链表声明
public class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; this.next = null; } }
链表的添加
public void insertList(ListNode head, int val) { ListNode tempNode = new ListNode(val); if (head == null) { head = tempNode; }else { ListNode p = head; while (p.next != null) { p = p.next; } p.next = tempNode; } }
链表的删除
public void deleteListNode(ListNode head, int val) { if (head ==null) return;//为了鲁棒性 if (head.val == val) {//头节点为要删除节点 head = head.next; } else { ListNode p = head; //删除节点需要知道前一个节点,所以判断p.next.val是不是和目标相等 while (p.next !=null && p.next.val != val) { p = p.next; } if (p.next !=null) { p.next = p.next.next;//删除节点 } } }
从尾到头打印链表
方法1:使用栈结构public void printList1(ListNode head) { if (head == null) return; Stack<ListNode> stack = new Stack<ListNode>(); ListNode p = head; while (p != null) { stack.push(p); p = p.next; } while (!stack.isEmpty()) { p = stack.pop(); System.out.print(p.val+" "); } }
方法2:递归
public void printList2 (ListNode head) { if (head != null) { if (head.next != null) { printList2(head.next); } System.out.print(head.val+" "); } }
注:递归的过程相当于栈。
反转单链表
public ListNode reverseList (ListNode head) { ListNode pre = null; ListNode next; while (head != null) { next = head.next; head.next = pre; pre = head; head = next; } return pre; }
学习数据结构与算法的记录和整理,如有错误或意见请帮忙指出,以后会持续更新。。。。
参考书籍:
《程序员代码面试指南:IT名企算法与数据结构题目最优解》—左程云
《剑指Offer》 —何海涛
相关文章推荐
- 左程云著算法与数据结构题目最优解笔记-反转单双链表
- 左程云著算法与数据结构题目最优解笔记-删除无序链表中重复的元素
- 左程云著算法与数据结构题目最优解笔记-位运算
- 【郝斌数据结构自学笔记】26_通过链表排序算法的演示再次详细讨论到底什么是算法以及到底什么是泛型【重点】
- 数据结构与算法学习笔记之 提高读取性能的链表(上)
- 数据结构高分笔记 算法2-18~2-19:双向循环链表
- 程序员代码面试指南:IT名企算法与数据结构题目最优解-字符串问题:C/C++语言实现
- 左程云_算法与数据结构 — 链表问题 — 03删除链表的中间节点和a/b处的节点
- 数据结构学习笔记 --- 线性表 (一些常见的关于链表的算法和面试题)
- 左程云_算法与数据结构 — 链表问题 — 05反转部分单链表
- 数据结构高分笔记 算法2-8~2-11:链表的基本操作
- 【郝斌数据结构自学笔记】24_链表创建和链表遍历算法的演示
- 【郝斌数据结构自学笔记】25_判断链表是否为空和求链表长度算法的演示
- 左程云_算法与数据结构 — 链表问题 — Node、DoubleNode、RandomNode类
- 左程云_算法与数据结构 — 链表问题 — 02在单链表和双链表中删除倒数第K个节点
- 【郝斌数据结构自学笔记】27-29_链表插入和删除算法的演示_复习
- 《程序员代码面试指南 IT名企算法与数据结构题目最优解》左程云著 pdf
- 左程云_算法与数据结构 — 链表问题 — 01打印两个有序链表的公共部分
- 数据结构学习笔记 --- 线性表 (一些常见的关于链表的算法和面试题)
- 数据结构学习笔记之链表分析与实现(二)