链表类常见算法题总结
2016-07-21 12:38
288 查看
链表类常见算法题目总结
1.反转链表翻转思想:
代码实现:
public class SinglyLinkedList_reverse { public static <T> void reverse(MSinglyLinkedList<T> list) { Node<T> p = list.head.next, succ = null, front = null; while (p != null) { succ = p.next;//保存p的后继节点 p.next = front;//使得p.next指向其前驱front front = p; p = succ; } list.head.next = front; } public static void main(String[] args) { String[] values = { "A", "B", "C", "D", "E", "F" }; MSinglyLinkedList<String> list = new MSinglyLinkedList<String>(values); System.out.println("翻转前" + list.toString()); reverse(list); System.out.println("翻转后" + list.toString()); } }
2.给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。
样例
给出链表1->2->3->4->5->null和 n = 2.
删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
/** * @param head: The first node of linked list. * @param n: An integer. * @return: The head of linked list. */ ListNode removeNthFromEnd(ListNode head, int n) { if (n <= 0) { return null; } ListNode dummy = new ListNode(0); dummy.next = head; ListNode preDelete = dummy; for (int i = 0; i < n; i++) { if (head == null) { return null; } head = head.next; } while (head != null) { head = head.next; preDelete = preDelete.next; } preDelete.next = preDelete.next.next; return dummy.next; }
相关文章推荐
- [C/C++]反转链表
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#实现基于链表的内存记事本实例
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- C#算法函数:获取一个字符串中的最大长度的数字
- C#模拟链表数据结构的实例解析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解