破解编程面试---链接的加法 (八种编程语言的实现)

破解编程面试---链接的加法 (八种编程语言的实现)

我们有两个非空链表,它们代表两个非负整数。这些数字以相反的顺序存储,并且它们的每个节点都包含一个数字。将两个数字相加,然后将它们作为链接列表返回。

您可能会假设两个数字除了数字0本身以外都不包含任何前导零。

输入:(2-> 4-> 3)+(5-> 6-> 4)

输出:7-> 0-> 8

说明:342 + 465 = 807。

思路

链表节点数据结构中包含值和下一个节点。

两个链表相加要对每个对应元素进行加操作;

如果计算结果超过了10,需要移位到高位;

如果有链表为空了,需要用最后的移位值0或者1对单独的链表中剩余的元素进行加操作;

最后再检查移位值,如果不为零,则添加为新元素。

Javascript:

class ListNode {

constructor(val, next=null) {

? ? this.val = val;

}

}

addTwoNumbers = (l1, l2)=> {

? let newNode = null;

? let head = null;

? let overTen = 0;

? while(l1 != null && l2 != null) {

? ? let sum = l1.val + l2.val + overTen;

? ? let v1 = sum % 10;

? ? overTen = parseInt(sum / 10);

? ? if (head == null) {

? ? ? head = new ListNode(v1);

? ? ? newNode = head;

? ? }

? ? else {

? ? ? newNode.next = new ListNode(v1);

? ? ? newNode = newNode.next;

? ? }

? ? l1 = l1.next;

? ? l2 = l2.next;

? }

? let l = !l1? l2 : l1;

? while(l) {

? ? let sum = l.val + overTen;

? ? let v1 = sum % 10;

? ? overTen = parseInt(sum / 10);

? ? newNode.next = new ListNode(v1);

? ? newNode = newNode.next;

? ? l = l.next;

? }

? if(overTen != 0) {

? ? newNode.next = new ListNode(overTen);

? }

? return head;

};

{

? let l1 = new ListNode(2);

? l1.next = new ListNode(4);

? l1.next.next = new ListNode(3);

? let l2 = new ListNode(5);

? l2.next = new ListNode(6);

? l2.next.next = new ListNode(4);

? let l = addTwoNumbers(l1, l2);

? while(l != null) {

? ? console.log(l.val);? ? ?

? ? l = l.next;

? }

? console.log();

}

{

? let l1 = new ListNode(1);

? l1.next = new ListNode(8);

? let l2 = new ListNode(0);

? let l = addTwoNumbers(l1, l2);

? while(l != null) {

? ? console.log(l.val);? ? ?

? ? l = l.next;

? }

? console.log();

}

Java:

import java.util.*;

public class HelloWorld{

? static class ListNode {

? ? ? int val;

? ? ? ListNode next;

? ? ? ListNode(int x) { val = x; }

? }

? public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {

? ? ? ? ListNode newNode = null;

? ? ? ? ListNode head = null;

? ? ? ? int overTen = 0;

? ? ? ? while(l1 != null && l2 != null){

? ? ? ? ? ? int sum = l1.val + l2.val + overTen;

? ? ? ? ? ? int v1 = sum % 10;

? ? ? ? ? ? overTen = sum / 10;

? ? ? ? ? ? if(head == null){

? ? ? ? ? ? ? ? head = new ListNode(v1);

? ? ? ? ? ? ? ? newNode = head;

? ? ? ? ? ? }

? ? ? ? ? ? else{

? ? ? ? ? ? ? ? newNode.next = new ListNode(v1);

? ? ? ? ? ? ? ? newNode = newNode.next;

? ? ? ? ? ? }

? ? ? ? ? ? l1 = l1.next;

? ? ? ? ? ? l2 = l2.next;

? ? ? ? }


? ? ? ? ListNode l = l1 == null? l2: l1;


? ? ? ? while(l != null){

? ? ? ? ? ? int sum = l.val + overTen;

? ? ? ? ? ? int v1 = sum % 10;

? ? ? ? ? ? overTen = sum / 10;

? ? ? ? ? ? newNode.next = new ListNode(v1);

? ? ? ? ? ? newNode = newNode.next;?

? ? ? ? ? ? l = l.next;?

? ? ? ? }?

? ? ? ? if(overTen != 0){

? ? ? ? ? ?newNode.next = new ListNode(overTen);

? ? ? ? }


? ? ? ? return head;

? ? }

? ? ?public static void main(String []args){

? ? ? ? ?{

? ? ? ? ? ? ?ListNode l1 = new ListNode(2);

? ? ? ? ? ? ?l1.next = new ListNode(4);

? ? ? ? ? ? ?l1.next.next = new ListNode(3);

? ? ? ? ? ? ?ListNode l2 = new ListNode(5);

? ? ? ? ? ? ?l2.next = new ListNode(6);

? ? ? ? ? ? ?l2.next.next = new ListNode(4);

? ? ? ? ? ? ?ListNode l = addTwoNumbers(l1, l2);

? ? ? ? ? ? ?while(l != null) {

? ? ? ? ? ? ? ? System.out.print(l.val);? ? ?

? ? ? ? ? ? ? ? l = l.next;

? ? ? ? ? ? ?}

? ? ? ? ? ? ?System.out.println();

? ? ? ? ?}

? ? ? ? ?{

? ? ? ? ? ? ?ListNode l1 = new ListNode(1);

? ? ? ? ? ? ?l1.next = new ListNode(8);

? ? ? ? ? ? ?ListNode l2 = new ListNode(0);

? ? ? ? ? ? ?ListNode l = addTwoNumbers(l1, l2);

? ? ? ? ? ? ?while(l != null) {

? ? ? ? ? ? ? ? System.out.print(l.val);? ? ?

? ? ? ? ? ? ? ? l = l.next;

? ? ? ? ? ? ?}

? ? ? ? ? ? ?System.out.println();

? ? ? ? ?}


? ? ?}

}

C#:

using System;

class ListNode {

? ? ? public int val;

? ? ? public ListNode next;

? ? ? public ListNode(int x) { val = x; }

}

class HelloWorld {

? ? public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {

? ? ? ? ListNode newNode = null;

? ? ? ? ListNode head = null;

? ? ? ? int overTen = 0;

? ? ? ? while(l1 != null && l2 != null){

? ? ? ? ? ? int sum = l1.val + l2.val + overTen;

? ? ? ? ? ? int v1 = sum % 10;

? ? ? ? ? ? overTen = sum / 10;

? ? ? ? ? ? if(head == null){

? ? ? ? ? ? ? ? head = new ListNode(v1);

? ? ? ? ? ? ? ? newNode = head;

? ? ? ? ? ? }

? ? ? ? ? ? else{

? ? ? ? ? ? ? ? newNode.next = new ListNode(v1);

? ? ? ? ? ? ? ? newNode = newNode.next;

? ? ? ? ? ? }

? ? ? ? ? ? l1 = l1.next;

? ? ? ? ? ? l2 = l2.next;

? ? ? ? }


? ? ? ? ListNode l = l1 == null? l2: l1;


? ? ? ? while(l != null){

? ? ? ? ? ? int sum = l.val + overTen;

? ? ? ? ? ? int v1 = sum % 10;

? ? ? ? ? ? overTen = sum / 10;

? ? ? ? ? ? newNode.next = new ListNode(v1);

? ? ? ? ? ? newNode = newNode.next;?

? ? ? ? ? ? l = l.next;?

? ? ? ? }?

? ? ? ? if(overTen != 0){

? ? ? ? ? ?newNode.next = new ListNode(overTen);

? ? ? ? }


? ? ? ? return head;

? ? }? ? ?

? static void Main() {


? ? Console.WriteLine("Hello World");


? ? ? ?{

? ? ? ? ? ? ?ListNode l1 = new ListNode(2);

? ? ? ? ? ? ?l1.next = new ListNode(4);

? ? ? ? ? ? ?l1.next.next = new ListNode(3);

? ? ? ? ? ? ?ListNode l2 = new ListNode(5);

? ? ? ? ? ? ?l2.next = new ListNode(6);

? ? ? ? ? ? ?l2.next.next = new ListNode(4);

? ? ? ? ? ? ?ListNode l = addTwoNumbers(l1, l2);

? ? ? ? ? ? ?while(l != null) {

? ? ? ? ? ? ? ? Console.Write(l.val);? ? ?

? ? ? ? ? ? ? ? l = l.next;

? ? ? ? ? ? ?}

? ? ? ? ? ? ?Console.WriteLine();

? ? ? ? ?}

? ? ? ? ?{

? ? ? ? ? ? ?ListNode l1 = new ListNode(1);

? ? ? ? ? ? ?l1.next = new ListNode(8);

? ? ? ? ? ? ?ListNode l2 = new ListNode(0);

? ? ? ? ? ? ?ListNode l = addTwoNumbers(l1, l2);

? ? ? ? ? ? ?while(l != null) {

? ? ? ? ? ? ? ? Console.Write(l.val);? ? ?

? ? ? ? ? ? ? ? l = l.next;

? ? ? ? ? ? ?}

? ? ? ? ? ? ?Console.WriteLine();

? ? ? ? ?}



? }

}

Swift:

import Foundation

public class ListNode {

? ? public var val: Int

? ? public var next: ListNode?

? ? public init(_ val: Int) {

? ? ? ? self.val = val

? ? ? ? self.next = nil

? ? ?}

}

func addTwoNumbers(_ la: ListNode?, _ lb: ListNode?) -> ListNode? {

? ? var l1 = la

? ? var l2 = lb

? ? var newNode: ListNode?

? ? var head: ListNode?

? ? var overTen: Int = 0

? ? while (l1 != nil && l2 != nil) {

? ? ? ? var sum: Int = l1!.val + l2!.val + overTen

? ? ? ? var v1 = sum % 10

? ? ? ? overTen = sum / 10

? ? ? ? if( head == nil) {

? ? ? ? ? ? head = ListNode(v1)

? ? ? ? ? ? newNode = head;

? ? ? ? }

? ? ? ? else {

? ? ? ? ? ? newNode!.next =? ListNode(v1)

? ? ? ? ? ? newNode = newNode!.next

? ? ? ? }

? ? ? ? l1 = l1!.next

? ? ? ? l2 = l2!.next? ? ? ??

? ? }

? ? var l: ListNode? = l1 == nil ? l2 : l1

? ? while (l != nil) {

? ? ? ? var sum = l!.val + overTen

? ? ? ? var v1 = sum % 10;

? ? ? ? overTen = sum / 10;

? ? ? ? newNode!.next = ListNode(v1);

? ? ? ? newNode = newNode!.next;

? ? ? ? l = l!.next;

? ? }

? ? if(overTen != 0) {

? ? ? ? newNode!.next = ListNode(overTen)

? ? }

? ? return head

}

func test1() {

? ? var l1: ListNode? = ListNode(2)

? ? l1!.next = ListNode(4)

? ? l1!.next!.next = ListNode(3)

? ? var l2: ListNode? = ListNode(5)

? ? l2!.next = ListNode(6)

? ? l2!.next!.next = ListNode(4)

? ? var l = addTwoNumbers(l1, l2)

? ? while(l != nil) {

? ? ? ? print("\(l!.val)", terminator:"")

? ? ? ? l = l!.next

? ? }

print("\n")

}

func test2() {

? ? var l1: ListNode? = ListNode(1)

? ? l1!.next = ListNode(8)

? ? var l2: ListNode? = ListNode(0)

? ? var l = addTwoNumbers(l1, l2)

? ? while(l != nil) {

? ? ? ? print("\(l!.val)", terminator:"")

? ? ? ? l = l!.next

? ? }

print("\n")

}

test1()

test2()

Kotlin:

import kotlin.properties.Delegates

class ListNode {

? ? var `val`: Int = 0

? ? var next: ListNode? = null

? ? constructor(v: Int) {

? ? ? ? this.`val` = v

? ? }

}

fun addTwoNumbers(la: ListNode?, lb: ListNode?): ListNode? {

? ? var l1: ListNode? = la

? ? var l2: ListNode? = lb

? ? var newNode: ListNode? = null

? ? var head: ListNode? = null

? ? var overTen: Int = 0

? ? while (l1 != null && l2 != null) {

? ? ? ? var sum: Int = l1?.`val` + l2?.`val` + overTen

? ? ? ? var v1 = sum % 10

? ? ? ? overTen = sum / 10

? ? ? ? if (head == null) {

? ? ? ? ? ? head = ListNode(v1)

? ? ? ? ? ? newNode = head;

? ? ? ? } else {

? ? ? ? ? ? newNode?.next = ListNode(v1)

? ? ? ? ? ? newNode = newNode?.next

? ? ? ? }

? ? ? ? l1 = l1?.next

? ? ? ? l2 = l2?.next

? ? }

? ? var l: ListNode? = l1

? ? if (l1 == null) {

? ? ? ? l = l2

? ? }

? ? while (l != null) {

? ? ? ? var sum = l?.`val` + overTen

? ? ? ? var v1 = sum % 10;

? ? ? ? overTen = sum / 10;

? ? ? ? newNode?.next = ListNode(v1);

? ? ? ? newNode = newNode?.next;

? ? ? ? l = l?.next;

? ? }

? ? if (overTen != 0) {

? ? ? ? newNode?.next = ListNode(overTen)

? ? }

? ? return head

}

fun main() {

? ? test1()

? ? test2()

}

private fun test1() {

? ? var l1: ListNode? = ListNode(2)

? ? l1?.next = ListNode(4)

? ? l1?.next?.next = ListNode(3)

? ? var l2: ListNode? = ListNode(5)

? ? l2?.next = ListNode(6)

? ? l2?.next?.next = ListNode(4)

? ? var l = addTwoNumbers(l1, l2)

? ? while (l != null) {

? ? ? ? print("${l.`val`}")

? ? ? ? l = l?.next

? ? }

? ? println()

}

private fun test2() {

? ? var l1: ListNode? = ListNode(1)

? ? l1?.next = ListNode(8)

? ? var l2: ListNode? = ListNode(0)

? ? var l = addTwoNumbers(l1, l2)

? ? while (l != null) {

? ? ? ? print("${l.`val`}")

? ? ? ? l = l?.next

? ? }

? ? println()

}

Python:

class ListNode:

? ? def __init__(self, x):

? ? ? ? self.val = x

? ? ? ? self.next = None

def addTwoNumbers(l1: ListNode, l2: ListNode) -> ListNode:

? ? newNode = None

? ? head = None

? ? overTen = 0

? ? while l1 != None and l2 != None:

? ? ? ? sum = l1.val + l2.val + overTen

? ? ? ? v1 = sum % 10

? ? ? ? overTen = int(sum / 10)

? ? ? ? if head == None:

? ? ? ? ? ? head = ListNode(v1)

? ? ? ? ? ? newNode = head

? ? ? ? else:

? ? ? ? ? ? newNode.next = ListNode(v1);

? ? ? ? ? ? newNode = newNode.next

? ? ? ? l1 = l1.next

? ? ? ? l2 = l2.next


? ? l = l1 if l1 != None else l2

? ? while l != None:

? ? ? ? v1 = l.val

? ? ? ? if overTen != 0:

? ? ? ? ? ? sum = l.val + overTen

? ? ? ? ? ? v1 = sum % 10

? ? ? ? ? ? overTen = int(sum / 10)

? ? ? ? newNode.next = ListNode(v1);

? ? ? ? newNode = newNode.next

? ? ? ? l = l.next

? ? if overTen != 0:

? ? ? ? newNode.next = ListNode(overTen);

? ? return head

def test1():

? ? l1 = ListNode(2)? ??

? ? l1.next = ListNode(4)? ??

? ? l1.next.next = ListNode(3)


? ? l2 = ListNode(5)

? ? l2.next = ListNode(6)

? ? l2.next.next = ListNode(4)


? ? l = addTwoNumbers(l1, l2)

? ? while l != None:

? ? ? ? print(l.val, end = '')

? ? ? ? l = l.next


? ? print()

def test2():

? ? l1 = ListNode(1)? ??

? ? l1.next = ListNode(8)? ??


? ? l2 = ListNode(0)

? ? l = addTwoNumbers(l1, l2)

? ? while l != None:

? ? ? ? print(l.val, end = '')

? ? ? ? l = l.next

? ? print()

test1()

test2()

C++:

#include <stdio.h>

#include <iostream>

?struct ListNode {

? ? ?int val;

? ? ?ListNode *next;

? ? ?ListNode(int x) : val(x), next(NULL) {}

?};

ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {

? ? ListNode *newNode = 0;

? ? ListNode *head = 0;

? ? int overTen = 0;

? ? while(l1 != 0 && l2 != 0) {

? ? ? ? int sum = l1->val + l2->val + overTen;

? ? ? ? int v1 = sum % 10;

? ? ? ? overTen = sum /10;

? ? ? ? if(head == 0){

? ? ? ? ? ? head = new ListNode(v1);

? ? ? ? ? ? newNode = head;

? ? ? ? }

? ? ? ? else {

? ? ? ? ? ? newNode->next = new ListNode(v1);

? ? ? ? ? ? newNode = newNode->next;

? ? ? ? }

? ? ? ? delete l1;

? ? ? ? delete l2;

? ? ? ? l1 = l1->next;

? ? ? ? l2 = l2->next;

? ? }


? ? ListNode* l = l1 != NULL ? l1: l2;

? ? while(l != NULL) {

? ? ? ? int v1 = l->val;

? ? ? ? if(overTen != 0){

? ? ? ? ? ? int sum = l->val + overTen;

? ? ? ? ? ? v1 = sum % 10;

? ? ? ? ? ? overTen = sum / 10;

? ? ? ? }

? ? ? ? newNode->next = new ListNode(v1);

? ? ? ? newNode = newNode->next;?

? ? ? ? delete l;

? ? ? ? l = l->next;?

? ? }

? ? if(overTen != 0) {

? ? ? ? newNode->next = new ListNode(overTen);

? ? }

? ? return head;

}

void test1 () {

? ? ListNode *l1 = new ListNode(2);

? ? l1->next = new ListNode(4);

? ? l1->next->next = new ListNode(3);


? ? ListNode *l2 = new ListNode(5);

? ? l2->next = new ListNode(6);

? ? l2->next->next = new ListNode(4);


? ? ListNode *l = addTwoNumbers(l1, l2);


? ? while(l != NULL) {

? ? ? ? std::cout << l->val;

? ? ? ? delete l;

? ? ? ? l = l->next;

? ? }

? ? std::cout << std::endl;

}

void test2 () {

? ? ListNode *l1 = new ListNode(1);

? ? l1->next = new ListNode(8);

? ? ListNode *l2 = new ListNode(0);

? ? ListNode *l = addTwoNumbers(l1, l2);


? ? while(l != NULL) {

? ? ? ? std::cout << l->val;

? ? ? ? delete l;

? ? ? ? l = l->next;

? ? }

? ? std::cout << std::endl;

}

int main()

{

? ? test1();

? ? test2();

? ? return 0;

}

Golang:

package main

import (

"fmt"

)

type ListNode struct {

? ? Val int

? ? Next *ListNode

}

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {

? ? var newNode *ListNode = nil

? ? var head *ListNode = nil

? ? var overTen = 0

? ? for l1 != nil && l2 != nil {

sum := l1.Val + l2.Val + overTen

v1 := sum % 10

? ? ? ? overTen = sum /10


? ? ? ? if head == nil {

? ? ? ? ? ? head = &ListNode{Val: v1}

? ? ? ? ? ? newNode = head

? ? ? ? } else? {

? ? ? ? ? ? newNode.Next = &ListNode{Val: v1}

? ? ? ? ? ? newNode = newNode.Next

? ? ? ? }

l1 = l1.Next

? ? ? ? l2 = l2.Next

? ? }

? ? l := l1

? ? if l1 == nil {

? ? ? ? l = l2

? ? }

? ? for l != nil {

? ? ? ? v1 := l.Val;

? ? ? ? if overTen != 0{

? ? ? ? ? ? sum := l.Val + overTen

? ? ? ? ? ? v1 = sum % 10

? ? ? ? ? ? overTen = sum / 10

? ? ? ? }

? ? ? ? newNode.Next = &ListNode{Val: v1}

? ? ? ? newNode = newNode.Next

? ? ? ? l = l.Next

? ? }

? ? if overTen != 0 {

? ? ? ? newNode.Next = &ListNode{Val: overTen }

? ? }

? ? return head? ??

}

func test1() {

? ? l1 := &ListNode {Val: 2}

? ? l1.Next = &ListNode {Val: 4}

? ? l1.Next.Next = &ListNode {Val: 3}

? ? l2 := &ListNode {Val: 5}

? ? l2.Next = &ListNode {Val: 6}

? ? l2.Next.Next = &ListNode {Val: 4}

? ? l := addTwoNumbers(l1, l2)

? ? for l != nil {

? ? ? ? fmt.Printf("%d", l.Val)

? ? ? ? l = l.Next

? ? }

? ? fmt.Println();

}

func test2() {

? ? l1 := &ListNode {Val: 1}

? ? l1.Next = &ListNode {Val: 8}

? ? l2 := &ListNode {Val: 0}

? ? l := addTwoNumbers(l1, l2)

? ? for l != nil {

? ? ? ? fmt.Printf("%d", l.Val)

? ? ? ? l = l.Next

? ? }

? ? fmt.Println();

}

func main() {

? ? test1()

test2()

}

?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容