JavaBasic 之 LinkedList

时间:2017-06-17 22:12:00   收藏:0   阅读:244

一、链表

  1. 基本介绍:

  链表是线性表的一种。线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表有两种存储方式,一种是顺序存储结构,另一种是链式存储结构。我们常用的数组就是一种典型的顺序存储结构。

  相反,链式存储结构就是两个相邻的元素在内存中可能不是相邻的,每一个元素都有一个指针域,指针域一般是存储着到下一个元素的指针。这种存储方式的优点是定点插入和定点删除的时间复杂度为 O(1),不会浪费太多内存,添加元素的时候才会申请内存,删除元素会释放内存。缺点是访问的时间复杂度最坏为 O(n)。

  顺序表的特性是随机读取,也就是访问一个元素的时间复杂度是O(1),链式表的特性是插入和删除的时间复杂度为O(1)。链表就是链式存储的线性表。根据指针域的不同,链表分为单向链表、双向链表、循环链表等等。

技术分享
1 public class ListNode {
2     public int val ;
3     public ListNode next ;
4     public ListNode(int val){
5         this.val = val ;
6         this.next = null ;
7     }
8 }
View Code

  2. 链表反转

  链表的基本形式是:1 -> 2 -> 3 -> null,反转需要变为 3 -> 2 -> 1 -> null。这里要注意:

  3. 双向链表  

技术分享
 1 package LinkedList;
 2 
 3 public class DListNode 
 4 {
 5     int val ;
 6     DListNode prev, next ;
 7     DListNode(int val){
 8         this.val = val ;
 9         this.prev = this.next = null ;
10     }
11     
12     public DListNode reverse(DListNode head){
13         DListNode curr = null ;
14         while(head != null){
15             curr = head ;
16             head = curr.next ;
17             curr.next = curr.prev ;
18             curr.prev = head ;
19         }
20         return curr ;
21     }
22 }
View Code

  4. 链表的鲁棒性    

  链表操作时的鲁棒性问题主要包含两个情况:

参考GitHub。https://algorithm.yuanbin.me/zh-hans/basics_data_structure/linked_list.html#反转链表

原文:http://www.cnblogs.com/Wyao/p/7041349.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!