每周一數(shù)據(jù)結(jié)構(gòu)之鏈表(Kotlin描述)

一阵幸、鏈表的定義

鏈表是一種遞歸的數(shù)據(jù)結(jié)構(gòu)捕仔,是一種線性結(jié)構(gòu)堤尾,但是并不會(huì)按線性的順序存儲(chǔ)數(shù)據(jù)服赎,而是在每一個(gè)節(jié)點(diǎn)里存到下一個(gè)節(jié)點(diǎn)的指針(Pointer)啰劲,簡(jiǎn)單來(lái)說(shuō)鏈表并不像數(shù)組那樣將數(shù)組存儲(chǔ)在一個(gè)連續(xù)的內(nèi)存地址空間里梁沧,它們可以不是連續(xù)的因?yàn)樗麄兠總€(gè)節(jié)點(diǎn)保存著下一個(gè)節(jié)點(diǎn)的引用(地址)

二、鏈表的類(lèi)型

單鏈表

  • 1蝇裤、定義

單鏈表(又稱單向鏈表)是鏈表中的一種廷支,其特點(diǎn)是鏈表的鏈接方向是單向的,對(duì)鏈表的訪問(wèn)要從頭部(head)開(kāi)始栓辜,然后依次通過(guò)next指針讀取下一個(gè)節(jié)點(diǎn)恋拍。

  • 2、數(shù)據(jù)結(jié)構(gòu)

單鏈表的數(shù)據(jù)結(jié)構(gòu)可以分為兩部分:數(shù)據(jù)域和指針域藕甩,數(shù)據(jù)域存儲(chǔ)數(shù)據(jù)施敢,指針域指向下一個(gè)存儲(chǔ)節(jié)點(diǎn)的地址。注意: 單向鏈表只可向一個(gè)方向進(jìn)行遍歷

image
  • 3狭莱、節(jié)點(diǎn)代碼描述
//(Kotlin描述)
class LinkedNode(var value: Int) {
    var next: LinkedNode? = null //指向下一個(gè)存儲(chǔ)節(jié)點(diǎn)的next指針
}
//(Java描述)
public class LinkedNode {
    int value;
    LinkedNode next; //指向下一個(gè)存儲(chǔ)節(jié)點(diǎn)的next指針
    public LinkedNode(int value) {
        this.value = value;
    }
}

雙鏈表

  • 1僵娃、定義

雙鏈表(又稱雙向鏈表),是鏈表中一種腋妙,與單鏈表不同的是它的每個(gè)節(jié)點(diǎn)都有兩個(gè)指針默怨,分別指向直接后繼節(jié)點(diǎn)直接前驅(qū)節(jié)點(diǎn);所以辉阶,從雙鏈表中的任意一個(gè)結(jié)點(diǎn)開(kāi)始先壕,都可以很方便地訪問(wèn)它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。

  • 2谆甜、數(shù)據(jù)結(jié)構(gòu)

雙鏈表的數(shù)據(jù)結(jié)構(gòu)可以分為三部分:prev指針域垃僚、數(shù)據(jù)域和next指針域,prev指針域指向上一個(gè)存儲(chǔ)節(jié)點(diǎn)的地址(也即指向直接前驅(qū)節(jié)點(diǎn)),數(shù)據(jù)域存儲(chǔ)數(shù)據(jù)规辱,next指針域指向下一個(gè)存儲(chǔ)節(jié)點(diǎn)的地址(也即指向直接后繼節(jié)點(diǎn))谆棺。注意: 單向鏈表可向兩個(gè)方向進(jìn)行遍歷,分別為正序和逆序遍歷

image
  • 3、節(jié)點(diǎn)代碼描述
//(Kotlin描述)
class LinkedNode(var value: Int) {
    var prev: LinkedNode? = null //指向上一個(gè)存儲(chǔ)節(jié)點(diǎn)的prev指針
    var next: LinkedNode? = null //指向下一個(gè)存儲(chǔ)節(jié)點(diǎn)的next指針
}
//(Java描述)
public class LinkedNode {
    int value;
    LinkedNode prev; //指向上一個(gè)存儲(chǔ)節(jié)點(diǎn)的prev指針
    LinkedNode next; //指向下一個(gè)存儲(chǔ)節(jié)點(diǎn)的next指針
    public LinkedNode(int value) {
        this.value = value;
    }
}

單向循環(huán)鏈表

  • 1、定義

單向循環(huán)鏈表改淑,只是在單鏈表的基礎(chǔ)上碍岔,它的最后一個(gè)結(jié)點(diǎn)不再為null而是指向頭結(jié)點(diǎn),形成一個(gè)環(huán)朵夏。并且在節(jié)點(diǎn)結(jié)構(gòu)上和單鏈表是一樣的蔼啦。因此,從單向循環(huán)鏈表中的任何一個(gè)結(jié)點(diǎn)出發(fā)都能找到任何其他結(jié)點(diǎn)仰猖。

  • 2捏肢、數(shù)據(jù)結(jié)構(gòu)
image

雙向循環(huán)鏈表

  • 1、定義

雙向循環(huán)鏈表饥侵,只是在雙鏈表的基礎(chǔ)鸵赫,它的頭節(jié)點(diǎn)的prev指針不再為null,而是直接指向它的尾節(jié)點(diǎn)躏升;它的尾節(jié)點(diǎn)的next指針不再為null辩棒,而是直接指向它的頭節(jié)點(diǎn)。

  • 2膨疏、數(shù)據(jù)結(jié)構(gòu)
image

三一睁、鏈表的特點(diǎn)

  • 1、在內(nèi)存中不是連續(xù)的內(nèi)存地址空間成肘,它只是一種邏輯上的線性連續(xù)結(jié)構(gòu)卖局。每個(gè)節(jié)點(diǎn)都含有指向下一個(gè)節(jié)點(diǎn)的next指針(可能指向下一個(gè)節(jié)點(diǎn)或null)
  • 2斧蜕、鏈表在節(jié)點(diǎn)的刪除和增加有著很高效率双霍,基本是O(1)常數(shù)級(jí)的時(shí)間效率,而順序表實(shí)現(xiàn)刪除和增加操作則是線性級(jí)O(n)的時(shí)間效率批销。所以一般用于用于元素節(jié)點(diǎn)頻繁刪除和增加
  • 3洒闸、而對(duì)于鏈表的查找和獲得第K個(gè)鏈表中節(jié)點(diǎn),往往需要采用遍歷的方式實(shí)現(xiàn)均芽,所以一般需要O(n)的時(shí)間效率
  • 4丘逸、鏈表長(zhǎng)度是可變的,也就意味著在內(nèi)存空間足夠范圍內(nèi)掀宋,鏈表長(zhǎng)度可以無(wú)限擴(kuò)大深纲。而順序表則一般是固定的,當(dāng)超出長(zhǎng)度的時(shí)候則會(huì)進(jìn)行擴(kuò)容劲妙。

四湃鹊、鏈表的基本操作

鏈表的構(gòu)造

我們知道一個(gè)節(jié)點(diǎn)類(lèi)型的變量就可以表示一條鏈表,只要保證對(duì)應(yīng)的每個(gè)節(jié)點(diǎn)的next指針能夠指向下一個(gè)節(jié)點(diǎn)即可或指向null(表示鏈表最后一個(gè)節(jié)點(diǎn))

  • 1镣奋、單鏈表的構(gòu)造
image
//鏈表結(jié)構(gòu)定義
class LinkedNode(var value: Int) {
    var next: LinkedNode? = null
}
//鏈表的構(gòu)造
fun main(args: Array<String>) {
    val node1 = LinkedNode(value = 1)//創(chuàng)建節(jié)點(diǎn)1
    val node2 = LinkedNode(value = 2)//創(chuàng)建節(jié)點(diǎn)2
    val node3 = LinkedNode(value = 3)//創(chuàng)建節(jié)點(diǎn)3
    node1.next = node2//通過(guò)node1的next指針指向node2币呵,把node1和node2連接起來(lái)
    node2.next = node3//通過(guò)node2的next指針指向node3,把node2和node3連接起來(lái)
}
  • 2侨颈、雙鏈表的構(gòu)造
image
class LinkedNode(var value: Int) {
    var prev: LinkedNode? = null
    var next: LinkedNode? = null
}

fun main(args: Array<String>) {
    val node1 = LinkedNode(value = 1)//創(chuàng)建節(jié)點(diǎn)1 此時(shí)的prev,next均為null
    val node2 = LinkedNode(value = 2)//創(chuàng)建節(jié)點(diǎn)2 此時(shí)的prev,next均為null
    val node3 = LinkedNode(value = 3)//創(chuàng)建節(jié)點(diǎn)3 此時(shí)的prev,next均為null
    
    node1.next = node2 //node1的next指針指向直接后繼節(jié)點(diǎn)node2
    node2.prev = node1 //node2的prev指針指向直接前驅(qū)節(jié)點(diǎn)node1
    
    node2.next = node3 //node2的next指針指向直接后繼節(jié)點(diǎn)node3
    node3.prev = node2 //node3的prev指針指向直接前驅(qū)節(jié)點(diǎn)node2
}

鏈表表頭插入節(jié)點(diǎn)

在鏈表表頭插入一個(gè)節(jié)點(diǎn)是最簡(jiǎn)單的一種操作余赢,一般處理方式芯义,先創(chuàng)建一個(gè)oldFirst指向第一個(gè)節(jié)點(diǎn),然后重新創(chuàng)建一個(gè)新的節(jié)點(diǎn),將新節(jié)點(diǎn)的next指向oldFirst指向的節(jié)點(diǎn)妻柒,first指向新插入的節(jié)點(diǎn)扛拨。

  • 1、單鏈表表頭插入節(jié)點(diǎn)
image
fun insertToHead(head: LinkedNode): LinkedNode {
    var first: LinkedNode = head
    val oldFirst: LinkedNode = head
    first = LinkedNode(value = 6)
    first.next = oldFirst
    return first
}
  • 2举塔、雙鏈表表頭插入節(jié)點(diǎn)
image
fun insertToHead(head: LinkedNode): LinkedNode {
    var first: LinkedNode = head
    val oldFirst: LinkedNode = head
    first = LinkedNode(value = 6)
    oldFirst.prev = first
    first.next = oldFirst
    return first
}

在表頭刪除節(jié)點(diǎn)

  • 1鬼癣、單鏈表表頭刪除節(jié)點(diǎn)
image
fun deleteToHead(head: LinkedNode): LinkedNode? {
    var first: LinkedNode? = head
    first = first?.next
    return first
}
  • 2、雙鏈表表頭刪除節(jié)點(diǎn)
image
fun deleteToHead(head: LinkedNode): LinkedNode? {
    var first: LinkedNode? = head
    first = first?.next
    first?.prev = null
    return first
}

在表尾插入節(jié)點(diǎn)

  • 1啤贩、單鏈表尾部插入節(jié)點(diǎn)
image
fun insertToTail(head: LinkedNode): LinkedNode? {
    var last = getTailNode(head) //通過(guò)遍歷得到尾部節(jié)點(diǎn)
    val oldLast = last
    last = LinkedNode(value = 4)
    oldLast?.next = last
    return head
}
  • 2待秃、雙鏈表尾部插入節(jié)點(diǎn)
image
fun insertToTail(head: LinkedNode): LinkedNode? {
    var last = getTailNode(head) //通過(guò)遍歷得到尾部節(jié)點(diǎn)
    val oldLast = last
    last = LinkedNode(value = 4)
    oldLast?.next = last
    last.prev = oldLast
    return head
}

在其他位置插入節(jié)點(diǎn)

  • 1、單鏈表其他位置插入節(jié)點(diǎn)


    image
fun insertToOther(head: LinkedNode): LinkedNode? {
    val current = getInsertPrevNode(head) //拿到需要的插入位置的上一個(gè)節(jié)點(diǎn)
    val newNode = LinkedNode(value = 6)
    newNode.next = current?.next// 新插入的節(jié)點(diǎn)next指向插入位置的上一個(gè)節(jié)點(diǎn)的next
    current?.next = newNode//然后斷開(kāi)插入位置的上一個(gè)節(jié)點(diǎn)的next痹屹,并把指向新插入的節(jié)點(diǎn)
    return head
}
  • 2章郁、雙鏈表其他位置插入節(jié)點(diǎn)
image
fun insertToOther(head: LinkedNode): LinkedNode? {
    val current = getInsertPrevNode(head) //拿到需要的插入位置的上一個(gè)節(jié)點(diǎn)
    val newNode = LinkedNode(value = 6)
    newNode.next = current?.next// 新插入的節(jié)點(diǎn)next指向插入位置的上一個(gè)節(jié)點(diǎn)的next
    newNode.prev = current //新插入的節(jié)點(diǎn)prev指向插入位置的上一個(gè)節(jié)點(diǎn)
    current?.next = newNode//然后斷開(kāi)插入位置的上一個(gè)節(jié)點(diǎn)的next,并把它指向新插入的節(jié)點(diǎn)
    current?.next?.prev = newNode //然后斷開(kāi)插入位置的上一個(gè)節(jié)點(diǎn)的prev,并把它指向新插入的節(jié)點(diǎn)
    return head
}

在其他位置刪除節(jié)點(diǎn)

  • 1志衍、單鏈表其他位置刪除節(jié)點(diǎn)
image
fun deleteToOther(head: LinkedNode): LinkedNode? {
    val current = getInsertPrevNode(head) //拿到需要的刪除節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)
    current?.next = current?.next?.next
    return head
}
  • 2暖庄、雙鏈表其他位置刪除節(jié)點(diǎn)
image
fun deleteToOther(head: LinkedNode): LinkedNode? {
    val current = getDeletePrevNode(head) //拿到需要的刪除節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)
    current?.next = current?.next?.next
    current?.next?.prev = current
    return head
}

鏈表的遍歷

fun traverseLinkedList(head: LinkedNode?) {
    var current = head
    while (current != null){
        println(current.value)
        current = current.next
    }
}

獲取鏈表的大小

fun getLength(head: LinkedNode?): Int {
    var len = 0
    var current = head
    while (current != null){
        len++
        current = current.next
    }
    
    return len
}

五、鏈表實(shí)現(xiàn)棧和隊(duì)列數(shù)據(jù)結(jié)構(gòu)

1楼肪、鏈表實(shí)現(xiàn)棧結(jié)構(gòu)

由于棧是一個(gè)表培廓,因此任何實(shí)現(xiàn)表的方法都能實(shí)現(xiàn)棧。顯然春叫,Java中常用的ArrayList和LinkedList集合都是支持棧操作的肩钠。

  • 實(shí)現(xiàn)思路

單鏈表也是能實(shí)現(xiàn)棧的,通過(guò)在表的頂端插入實(shí)現(xiàn)棧的push壓棧操作暂殖,通過(guò)刪除表的頂端元素實(shí)現(xiàn)pop入棧操作价匠。top操作只需要返回頂部的元素的值即可。

  • 實(shí)現(xiàn)代碼
class LinkedStack {
    private var first: Node? = null
    private var len: Int = 0

    fun push(value: Int) {//相當(dāng)于鏈表從表頭插入新的元素
        val oldFirst = first
        first = Node(value)
        first?.next = oldFirst
        len++
    }

    fun pop(): Int {//相當(dāng)于鏈表從表頭刪除新的元素
        val value = first?.value
        first = first?.next
        return value ?: -1
    }

    fun top(): Int {
        return first?.value ?: -1
    }

    fun isEmpty(): Boolean {
        return first == null
    }

    fun size(): Int {
        return len
    }

    inner class Node(var value: Int) {
        var next: Node? = null
    }
}

2呛每、鏈表實(shí)現(xiàn)隊(duì)列結(jié)構(gòu)

class LinkedQueue {
    private var first: Node? = null
    private var last: Node? = null
    private var len: Int = 0

    fun enqueue(value: Int) {//相當(dāng)于鏈表從尾部插入新的節(jié)點(diǎn)
        val oldLast = last
        last = Node(value)
        last?.next = null
        if (isEmpty()) {
            first = last
        } else {
            oldLast?.next = last
        }
        len++
    }

    fun dequeue(): Int {//相當(dāng)于鏈表從尾部刪除最后節(jié)點(diǎn)
        val value = first?.value ?: -1
        first = first?.next
        if (isEmpty()) {
            last = null
        }
        return value
    }

    fun isEmpty(): Boolean {
        return first == null
    }

    fun size(): Int {
        return len
    }

    inner class Node(var value: Int) {
        var next: Node? = null
    }
}

六踩窖、鏈表反轉(zhuǎn)問(wèn)題

  • 1、定義

鏈表反轉(zhuǎn)(也稱鏈表的逆序)是鏈表中一種比較經(jīng)典的操作晨横,在一些數(shù)據(jù)結(jié)構(gòu)的題目鏈表的反轉(zhuǎn)也是逞笕考點(diǎn),鏈表的反轉(zhuǎn)也會(huì)做為一部分融入題目手形,比如回文鏈表問(wèn)題等

  • 2啥供、實(shí)現(xiàn)過(guò)程


    image
  • 3、代碼描述

fun reverseLinkedList(head: LinkedNode?): LinkedNode? {
    var prev: LinkedNode? = null
    var current: LinkedNode? = head
    var next: LinkedNode? = head

    while (current != null) {
        next = current.next
        current.next = prev
        prev = current
        current = next
    }
    
    return prev
}

七叁幢、鏈表中經(jīng)典快慢指針問(wèn)題

快慢指針追趕問(wèn)題在鏈表中是非常經(jīng)典的滤灯,快慢指針問(wèn)題一般用于解決鏈表中間節(jié)點(diǎn)問(wèn)題和鏈表是否含有環(huán)以及鏈表中環(huán)的入口位置等問(wèn)題。

如果使用快慢指針是判斷鏈表是否含有環(huán)的問(wèn)題,我們更希望fast和slow指針的相對(duì)路程是正好是環(huán)的長(zhǎng)度鳞骤,(也就是slow指針剛進(jìn)入環(huán)窒百,而fast指針剛繞環(huán)一圈,此時(shí)兩指針正好相遇)這樣兩個(gè)指針就相遇了豫尽。這樣取每步的速度差能夠被環(huán)長(zhǎng)度整除的數(shù)字篙梢。但是我們并不知道環(huán)的具體長(zhǎng)度,所以只能取每步的速度差能夠被環(huán)長(zhǎng)度整除的數(shù)字為1(1能被所有的數(shù)整除),所以我們?nèi)ast指針每次走2步美旧,slow指針每次走1步渤滞,實(shí)際上只要保證兩者速度差為1就可以了,你甚至可以fast每次走3步榴嗅,slow指針每次走2步都是可以的妄呕,這樣一來(lái)只要它們?cè)诃h(huán)里面就一定能相遇。

1嗽测、快慢指針與鏈表環(huán)問(wèn)題

    public boolean hasCycle(ListNode head) {
        if(head == null || head.next == null) return false;
        ListNode slow = head;
        ListNode fast = head;
        while(fast != null && fast.next != null){
            slow = slow.next;//慢指針每次走1步
            fast = fast.next.next;//快指針每次走2步
            if(slow == fast){//如果鏈表存在環(huán)绪励,那么slow和fast指針會(huì)相遇
                return true;
            }
        }
        
        return false;
    }

2、快慢指針找中間節(jié)點(diǎn)問(wèn)題

由快慢指針追趕的原理可知唠粥,如果fast指針和slow指針同時(shí)從鏈表(鏈表不含環(huán))的頭結(jié)點(diǎn)出發(fā)開(kāi)始遍歷疏魏,如果fast指針的每次遍歷步數(shù)是slow指針的兩倍,那么可得到如果fast遍歷到鏈表的尾部晤愧,那么此時(shí)的slow指針應(yīng)該處于鏈表的中間節(jié)點(diǎn)位置(具體題目可參考:LeetCode第876題)大莫。

    public ListNode middleNode(ListNode head) {
        if(head == null) return null;
        ListNode slow = head;
        ListNode fast = head;
        while(fast != null && fast.next != null){
            slow = slow.next;
            fast = fast.next.next;
        }
        
        return slow;
    }

八、LeetCode鏈表相關(guān)題目

  • 1官份、刪除鏈表的節(jié)點(diǎn)


    image

    image
  • 2只厘、反轉(zhuǎn)鏈表


    image

    image
  • 3、鏈表的中間節(jié)點(diǎn)


    image

    image

    image
  • 4贯吓、合并兩個(gè)有序鏈表


    image

    image
  • 5懈凹、刪除排序鏈表中的重復(fù)元素


    image

    image
  • 6蜀变、移除鏈表中的元素


    image

    image
  • 7悄谐、相交鏈表


    image

    image
  • 8、環(huán)形鏈表


    image

    image
  • 9库北、回文鏈表


    image

    image
  • 10爬舰、設(shè)計(jì)鏈表


    image

    image

<div align="center"><img src="https://user-gold-cdn.xitu.io/2018/5/14/1635c3fb0ba21ec1?w=430&h=430&f=jpeg&s=39536" width="200" height="200"></div>

歡迎關(guān)注Kotlin開(kāi)發(fā)者聯(lián)盟,這里有最新Kotlin技術(shù)文章寒瓦,每周會(huì)不定期翻譯一篇Kotlin國(guó)外技術(shù)文章情屹。如果你也喜歡Kotlin,歡迎加入我們~~~

Kotlin系列文章杂腰,歡迎查看:

Kotlin邂逅設(shè)計(jì)模式系列:

數(shù)據(jù)結(jié)構(gòu)與算法系列:

翻譯系列:

原創(chuàng)系列:

Effective Kotlin翻譯系列

實(shí)戰(zhàn)系列:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市凌摄,隨后出現(xiàn)的幾起案子羡蛾,更是在濱河造成了極大的恐慌,老刑警劉巖锨亏,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痴怨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡器予,警方通過(guò)查閱死者的電腦和手機(jī)浪藻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乾翔,“玉大人珠移,你說(shuō)我怎么就攤上這事∧┤冢” “怎么了钧惧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)勾习。 經(jīng)常有香客問(wèn)我浓瞪,道長(zhǎng),這世上最難降的妖魔是什么巧婶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任乾颁,我火速辦了婚禮,結(jié)果婚禮上艺栈,老公的妹妹穿的比我還像新娘英岭。我一直安慰自己,他們只是感情好湿右,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布诅妹。 她就那樣靜靜地躺著,像睡著了一般毅人。 火紅的嫁衣襯著肌膚如雪吭狡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天丈莺,我揣著相機(jī)與錄音划煮,去河邊找鬼。 笑死缔俄,一個(gè)胖子當(dāng)著我的面吹牛弛秋,可吹牛的內(nèi)容都是我干的器躏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蟹略,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼邀桑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起科乎,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤壁畸,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后茅茂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體捏萍,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年空闲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了令杈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碴倾,死狀恐怖逗噩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跌榔,我是刑警寧澤异雁,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站僧须,受9級(jí)特大地震影響纲刀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜担平,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一示绊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暂论,春花似錦面褐、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至扼菠,卻和暖如春摄杂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背循榆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留墨坚,地道東北人秧饮。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓映挂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盗尸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柑船,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容