C語言鏈表

鏈表

#include "stdio.h"
typedef struct Home
{
    int fridge;
    int washMachine;
    struct Home *address;
}Home;

int main()
{
    Home zaiHome,jiangHome,worldHome;
    zaiHome.fridge=0;
    zaiHome.washMachine=0;
    zaiHome.address=&jiangHome;
    
    jiangHome.fridge=1;
    jiangHome.washMachine=0;
    jiangHome.address=&worldHome;
    
    worldHome.fridge=1;
    worldHome.washMachine=1;
    worldHome.address=NULL;
    

    Home *p;
    for(p=&zaiHome;p!=NULL;p=p->address)
    {
        printf("fridge=%d,washMachine=%d\n",p->fridge,p->washMachine);
    }

}


#include "stdio.h"
typedef struct Home
{
    int fridge;
    int washMachine;
    struct Home *address;
}Home;

int main()
{
    Home zaiHome,jiangHome,worldHome;
    zaiHome.fridge=0;
    zaiHome.washMachine=0;
    zaiHome.address=&jiangHome;
    
    jiangHome.fridge=1;
    jiangHome.washMachine=0;
    jiangHome.address=&worldHome;
    
    worldHome.fridge=1;
    worldHome.washMachine=1;
    worldHome.address=NULL;
    Home *p=&zaiHome;
     printf("zaiHome.fridge=%d,washMachine=%d\n",p->fridge,p->washMachine);
    p=p->address;
    printf("jiangHome.fridge=%d,jiangMachine=%d\n",p->fridge,p->washMachine);
    p=p->address;
    printf("worldHome.fridge=%d,worldMachine=%d\n",p->fridge,p->washMachine);
    
}

#include "stdio.h"
typedef struct P
{
    int fridge;
    int washMachine;
    struct Home *address;
}Home;

  • 作業(yè)
111;xx1;xx1@qq.com
112;xx2;xx2@qq.com
113;xx3;xx3@qq.com

xx1;xx1.@qq.com;111
xx2;xx2.@qq.com;112
xx3;xx3.@qq.com;113

//1.先將文件中的內容讀取到內存中,fgets()存到字符串數(shù)組

//2.按照;分割字符串

//3.交換位置

//4.在文件里輸出

## C語言鏈表

### 鏈表

include "stdio.h"

typedef struct Home
{
int fridge;
int washMachine;
struct Home *address;
}Home;

int main()
{
Home zaiHome,jiangHome,worldHome;
zaiHome.fridge=0;
zaiHome.washMachine=0;
zaiHome.address=&jiangHome;

jiangHome.fridge=1;
jiangHome.washMachine=0;
jiangHome.address=&worldHome;

worldHome.fridge=1;
worldHome.washMachine=1;
worldHome.address=NULL;


Home *p;
for(p=&zaiHome;p!=NULL;p=p->address)
{
    printf("fridge=%d,washMachine=%d\n",p->fridge,p->washMachine);
}

}


include "stdio.h"

typedef struct Home
{
int fridge;
int washMachine;
struct Home *address;
}Home;

int main()
{
Home zaiHome,jiangHome,worldHome;
zaiHome.fridge=0;
zaiHome.washMachine=0;
zaiHome.address=&jiangHome;

jiangHome.fridge=1;
jiangHome.washMachine=0;
jiangHome.address=&worldHome;

worldHome.fridge=1;
worldHome.washMachine=1;
worldHome.address=NULL;
Home *p=&zaiHome;
 printf("zaiHome.fridge=%d,washMachine=%d\n",p->fridge,p->washMachine);
p=p->address;
printf("jiangHome.fridge=%d,jiangMachine=%d\n",p->fridge,p->washMachine);
p=p->address;
printf("worldHome.fridge=%d,worldMachine=%d\n",p->fridge,p->washMachine);

}


include "stdio.h"

typedef struct P
{
int fridge;
int washMachine;
struct Home *address;
}Home;


>- 作業(yè)

111;xx1;xx1@qq.com
112;xx2;xx2@qq.com
113;xx3;xx3@qq.com

xx1;xx1.@qq.com;111
xx2;xx2.@qq.com;112
xx3;xx3.@qq.com;113

//1.先將文件中的內容讀取到內存中,fgets()存到字符串數(shù)組

//2.按照;分割字符串

include "srdio.h"

int *xxx()
{
//我們在堆區(qū)分配出來一塊空間
int *p=(int *)malloc(sizeof(int));
return p;
}

int main()
{
int *p=xxx();
*p=6;
free(p);//釋放p所指向的那塊空間指向的堆區(qū)
return *p;
}


include "stdio.h"

include "stdib.h"

typedef struct Property
{
int fridge;
int washMachine;
}Property;

typedef struct Home
{
Property property;
struct Home *next;
}Home;
int main()
{
Home *pZai=(Home *)malloc(sizeof(Home));
Home *pJiang=(Home *)malloc(sizeof(Home));
Home *pWorld=(Home *)malloc(sizeof(Home));
pZai->property.fridge=0;
pZai->property.washMachine=0;
pZai->next=pJiang;

pJiang->property.fridge=0;
pJiang->property.washMachine=1;
pJiang->next=pWorld;

pWorld->property.fridge=1;
pWorld->property.washMachine=1;
pWorld->next=NULL;

Home *temp;
for(temp=pZai;temp!=NULL;temp=temp->next)
{
    printf("fridge=%d.washMachine=%d\n",temp->property.fridge,temp->property.washMachine);
}

return 0;

}


include "stdio.h"

include "stdlib.h"

typedef struct Property
{
int fridge;
int washMachine;
}Property;

typedef struct Home
{
Property property;
struct Home *next;
}Home;
int main()
{
Home *head=(Home *)malloc(sizeof(Home));
Home *pZai=(Home *)malloc(sizeof(Home));
Home *pJiang=(Home *)malloc(sizeof(Home));
Home *pWorld=(Home *)malloc(sizeof(Home));

//head所對應的空間地址域部分只存儲鏈表當中第一個有實際數(shù)據(jù)的節(jié)點地址葡兑;head所對應的空間數(shù)據(jù)域部分不存儲信息,我們叫做有頭節(jié)點.
head->next=pZai;

pZai->property.fridge=0;
pZai->property.washMachine=0;
pZai->next=pJiang;

pJiang->property.fridge=0;
pJiang->property.washMachine=0;
pJiang->next=pWorld;

pWorld->property.fridge=1;
pWorld->property.washMachine=1;
pWorld->next=NULL;

Home *temp;
for(temp=head->next;temp!=NULL;temp=temp->next)
{
    printf("fridge=%d.washMachine=%d\n",temp->property.fridge,temp->property.washMachine);
}

return 0;

}


>- 利用頭插法給鏈表填數(shù)據(jù)

include "stdio.h"

include "stdlib.h"

typedef struct Student
{
char name[10];
int num;
}Student;
typedef struct LINK
{
Student data;
struct LINK next;
}LINK,
pLINK;

int main()
{
//創(chuàng)建鏈表(創(chuàng)建頭節(jié)點)
pLINK head=(pLINK)malloc(sizeof(LINK));
head->next=NULL;
//1,頭插法赞草,給鏈表填入數(shù)據(jù)讹堤。
pLINK p=(pLINK)malloc(sizeof(LINK));
p->next=head->next;
head->next=p;
printf("請輸入學生信息:\n");
Student stu;
scanf("%s%d",stu.name,&stu.num);
p->data=stu;

//2.打印函數(shù)
pLINK temp=head->next;
for(;temp!=NULL;temp=temp->next)
{
    printf("name=%s,num=%d\n",temp->data.name,temp->data.num);
}

}


>- 如果存在內存泄露(開辟了兩個head,而只有一個head有用時),解決方法1

include "stdio.h"

include "stdlib.h"

typedef struct Student
{
char name[10];
int num;
}Student;
typedef struct LINK
{
Student data;
struct LINK next;
}LINK,
pLINK;

pLINK createList(pLINK head)//接收開辟的空間的地址
{
//創(chuàng)建鏈表(創(chuàng)建頭節(jié)點)
if(head==NULL)
{

    head=(pLINK)malloc(sizeof(LINK));
    head->next=NULL;
}
return head;//不為NULL時,直接返回地址,不創(chuàng)建.

}

int main()
{
pLINK head=NULL;
pLINK head=(pLINK *)malloc(sizeof(pLINK));
head->next=NULL;
head=createList(head);//將堆區(qū)建立的head空間的地址傳給子函數(shù)里的(pLINK head).
。厨疙。洲守。。
return 0;

}


>- 解決方法2

include "stdio.h"

include "stdlib.h"

typedef struct Student
{
char name[10];
int num;
}Student;
typedef struct LINK
{
Student data;
struct LINK next;
}LINK,
pLINK;

pLINK createList(pLINK head)
{
//創(chuàng)建鏈表(創(chuàng)建頭節(jié)點)
pLINK head=(pLINK)malloc(sizeof(LINK));
if(head==NULL)
{

    head=(pLINK)malloc(sizeof(LINK));
    head->next=NULL;
}
return head;

}

int main()
{
pLINK head=NULL;
pLINK head=(pLINK *)malloc(sizeof(pLINK));
head=createList(head);

沾凄。梗醇。。搭独。
return 0;

}


include "stdio.h"

include "stdlib.h"

typedef struct Student
{
char name[10];
int num;
}Student;
typedef struct LINK
{
Student data;
struct LINK next;
}LINK,
pLINK;

//創(chuàng)建鏈表(創(chuàng)建頭節(jié)點)
pLINK createList(pLINK head)
{
if(NULL==head)
{

    head=(pLINK)malloc(sizeof(LINK));
    head->next=NULL;
}
return head;

}
//打印函數(shù)
void printData(pLINK head)
{
if(NULL==head)
{
printf("無信息可打印:\n");
return;
}
pLINK temp=head->next;
for(;temp!=NULL;temp=temp->next)
{
printf("name=%s,num=%d\n",temp->data.name,temp->data.num);
}

}
Student getData();
void headInsertData(pLINK head)
{
if(NULL==head)
{
printf("鏈表沒有創(chuàng)建:\n");
return;
}
pLINK p=(pLINK)malloc(sizeof(LINK));
p->next=head->next;
head->next=p;
p->data=getData();

}
Student getData()
{
printf("請輸入學生信息:\n");
Student stu;
scanf("%s%d",stu.name,&stu.num);
return stu;

}

int main()
{

pLINK head=NULL;
head=(pLINK)malloc(sizeof(LINK));
head=createList(head);
headInsertData(head);
printData(head);
return 0;

}


include "stdio.h"

include "stdlib.h"

typedef struct Student
{
char name[10];
int num;
}Student;
typedef struct LINK
{
Student data;
struct LINK next;
}LINK,
pLINK;

//創(chuàng)建鏈表(創(chuàng)建頭節(jié)點)
pLINK createList(pLINK head)
{
if(NULL==head)
{

    head=(pLINK)malloc(sizeof(LINK));
    head->next=NULL;
}
printf("鏈表創(chuàng)建成功\n");
return head;

}
//打印函數(shù)
void printData(pLINK head)
{
if(NULL==head)
{
printf("無信息可打印:\n");

}
pLINK temp=head->next;
printf("head-->");
for(;temp!=NULL;temp=temp->next)
{
    printf("[%s,%d]--->",temp->data.name,temp->data.num);
}
printf("NULL\n");

}
Student getData();
void headInsertData(pLINK head)
{
if(NULL==head)
{
printf("鏈表沒有創(chuàng)建:\n");
return;
}
pLINK p=(pLINK)malloc(sizeof(LINK));
p->next=head->next;
head->next=p;
p->data=getData();
printf("數(shù)據(jù)插入成功\n");
}
Student getData()
{
printf("請輸入學生信息[name,num]:\n");
Student stu;
scanf("%s%d",stu.name,&stu.num);
return stu;

}

int main()
{
int select;
pLINK head=NULL;
while(1)
{
printf("==========\n");
printf("1.創(chuàng)建鏈表\n");
printf("2.頭插數(shù)據(jù)\n");
printf("3.打印數(shù)據(jù)\n");
printf("==========\n");
scanf("%d",&select);
switch(select)
{
case 1:
head=createList(head);
break;
case 2:
headInsertData(head);
break;
case 3:
printData(head);
break;
default:
break;
}
}
return 0;
}

include "stdio.h"

include "stdlib.h"

include "string.h"

typedef struct Student
{
char name[10];
int num;
}Student;
typedef struct LINK
{
Student data;
struct LINK next;
}LINK,
pLINK;

//創(chuàng)建鏈表(創(chuàng)建頭節(jié)點)
pLINK createList(pLINK head)
{
if(NULL==head)
{

    head=(pLINK)malloc(sizeof(LINK));
    head->next=NULL;
}
printf("鏈表創(chuàng)建成功\n");
return head;

}
//打印函數(shù)
void printData(pLINK head)
{
if(NULL==head)
{
printf("無信息可打印\n");
return;
}
pLINK temp=head->next;
printf("head-->");
for(;temp!=NULL;temp=temp->next)
{
printf("[%s,%d]--->",temp->data.name,temp->data.num);
}
printf("NULL\n");

}
Student getData();
void headInsertData(pLINK head)
{
if(NULL==head)
{
printf("鏈表沒有創(chuàng)建:\n");
return;
}
pLINK p=(pLINK)malloc(sizeof(LINK));
p->next=head->next;
head->next=p;
p->data=getData();
printf("頭部數(shù)據(jù)插入成功\n");
}
void myScanf(char *str,int size)
{
int i=0;
for(i=0;i<size-1;i++)
{
str[i]=getchar();
if(str[i]=='\n')
{
break;
}
}
//說明在中途碰到\n
if(str[i]=='\n')
{
str[i]='\0';
}
else
{
str[i]='\0';
while(getchar()!='\n');//吸收緩存里存留的字符
}
}
Student getData()
{
printf("請輸入學生信息[name,num]:\n");
Student stu;
myScanf(stu.name,20);
scanf("%d",&stu.num);
return stu;

}
void tailInsertData(pLINK head)
{
//找尾指針:最后一個節(jié)點的地址
pLINK temp;
for(temp=head;temp->next!=NULL;temp=temp->next)
{
;
}
//這個循環(huán)跳出的條件:temp->next==NULL;
pLINK p=(pLINK)malloc(sizeof(LINK));
p->data=getData();
temp->next=p;
p->next=NULL;
printf("尾部數(shù)據(jù)插入成功\n");

}
void headDeleteData(pLINK head)
{
if(NULL==head||head->next==NULL)
{
printf("無信息可刪\n");
return;
}
pLINK p=head->next;
head->next=p->next;
free(p);
p=NULL;
printf("頭刪成功\n");
}
void tailDeleteData(pLINK head)
{
pLINK temp;
if(head==NULL||head->next==NULL)
{
printf("無信息可刪\n");
return;
}
//相當于等待狀態(tài)婴削,等待temp->next->next==NULL;
for(temp=head;temp->next->next!=NULL;temp=temp->next)
{
;
}
pLINK p=temp->next;
temp->next=NULL;
free(p);
p=NULL;
printf("尾刪成功\n");
}
void randomInsertData(pLINK head)
{

int n,count=1,i;
printf("請輸入距離頭部多少個位置插入數(shù)據(jù)\n");
scanf("%d",&n);
getchar();
if(n==0)
{
    printf("輸入錯誤\n");
}
pLINK temp;
pLINK p=(pLINK)malloc(sizeof(LINK));
for(temp=head;temp->next!=NULL;temp=temp->next)
{   
    count++;
}
printf("count=%d\n",count);
if(n>count)
{
    printf("超出鏈表的長度了,輸入無效\n");
}
else if(n==count)
{
    temp->next=NULL;
    p->next=temp->next;
    temp->next=p;
    p->data=getData();
    printf("數(shù)據(jù)插入成功\n");
}
else if(n<count)
{
    temp=head;
    for(i=1;i<n;i++)
    {
        temp=temp->next;
    }
    printf("目前num=%d\n",temp->data.num);
    p->next=temp->next;
    temp->next=p;
    p->data=getData();
    printf("數(shù)據(jù)插入成功\n");
}

}

void insertData(pLINK head)
{
if(NULL==head)
{
printf("鏈表沒有創(chuàng)建:\n");
return;
}
int select;
while(1)
{
printf("==========\n");
printf("1.頭插數(shù)據(jù)\n");
printf("2.尾插數(shù)據(jù)\n");
printf("3.任意位置插入數(shù)據(jù)\n");
printf("4.返回上一層\n");
printf("==========\n");
scanf("%d",&select);
getchar();//吸收存留的\n
switch(select)
{
case 1:
headInsertData(head);
break;
case 2:
tailInsertData(head);
break;
case 3:
randomInsertData(head);
break;
case 4:
return;
default:
break;

    }

}

}

void randomDeleteData(pLINK head)
{
int n,count=1,i;
printf("請輸入距離頭部多少個位置刪除數(shù)據(jù)\n");
scanf("%d",&n);
getchar();
if(n==0)
{
printf("輸入錯誤\n");
}
pLINK temp;
pLINK p=(pLINK)malloc(sizeof(LINK));
for(temp=head;temp->next!=NULL;temp=temp->next)
{
count++;
}
printf("count=%d\n",count);
if(n>=count)
{
printf("刪除失敗\n");
}
else if(n==count-1)
{
temp=head;
for(i=1;i<n;i++)
{
temp=temp->next;
}
p=temp->next;
temp->next=NULL;
free(p);
printf("數(shù)據(jù)刪除成功\n");

}
else if(n<count-1)
{
    temp=head;
    for(i=1;i<n;i++)
    {
        temp=temp->next;
    }
    p=temp->next;
    temp->next=p->next;
    free(p);
    printf("數(shù)據(jù)刪除成功\n");
}

}
void deleteData(pLINK head)
{
if(head==NULL||head->next==NULL)
{
printf("無信息可刪\n");
return;
}
int select;
while(1)
{
printf("==========\n");
printf("1.頭刪數(shù)據(jù)\n");
printf("2.尾刪數(shù)據(jù)\n");
printf("3.任意位置刪除數(shù)據(jù)\n");
printf("4.返回上一層\n");
printf("==========\n");
scanf("%d",&select);
switch(select)
{
case 1:
headDeleteData(head);
break;
case 2:
tailDeleteData(head);
break;
case 3:
randomDeleteData(head);
break;
case 4:
return;
default:
break;

    }
}

}
void searchData(pLINK head)
{
if(head==NULL||head->next==NULL)
{
printf("無信息可查詢\n");
return;
}
int num;
printf("請輸入要查詢的學號\n");
scanf("%d",&num);
pLINK temp;
for(temp=head->next;temp!=NULL;temp=temp->next)
{
if(temp->data.num==num)
{
printf("[%s,%d]\n",temp->data.name,temp->data.num);
return;
}
}
if(NULL==temp)
{
printf("查無此人\n");
}
}
void changeData(pLINK head)
{
if(head==NULL||head->next==NULL)
{
printf("無信息可修改\n");
return;
}
char name[20];
printf("請輸入名字\n");
myScanf(name,20);
pLINK temp;
for(temp=head->next;temp!=NULL;temp=temp->next)
{
if(strcmp(temp->data.name,name)==0)
{
printf("該學生原來信息:[%s,%d]\n",temp->data.name,temp->data.num);
printf("請輸入要修改的信息[姓名牙肝,學號]:");
Student stu;
myScanf(stu.name,20);
scanf("%d",&stu.num);
getchar();
temp->data=stu;
printf("修改成功\n");
return;

    }
}
if(temp==NULL)
{
    printf("查無此人\n");
}

}

int main()
{
pLINK head=NULL;
int select;
while (1)
{
printf("=========\n");
printf("1.創(chuàng)建鏈表\n");
printf("2.插入數(shù)據(jù)\n");
printf("3.刪除數(shù)據(jù)\n");
printf("4.打印數(shù)據(jù)\n");
printf("5.查找數(shù)據(jù)\n");
printf("6.修改數(shù)據(jù)\n");
printf("7.退出\n");
printf("=========\n");
scanf("%d",&select);
getchar();
switch (select)
{
case 1:
head=createList(head);
break;
case 2:
insertData(head);
break;
case 3:
deleteData(head);
break;
case 4:
printData(head);
break;
case 5:
searchData(head);
break;
case 6:
changeData(head);
break;
case 7:
return 0;
default:
break;
}
}
return 0;
}


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嗤朴,隨后出現(xiàn)的幾起案子配椭,更是在濱河造成了極大的恐慌,老刑警劉巖雹姊,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件股缸,死亡現(xiàn)場離奇詭異,居然都是意外死亡吱雏,警方通過查閱死者的電腦和手機敦姻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門瘾境,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人镰惦,你說我怎么就攤上這事迷守。” “怎么了旺入?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵兑凿,是天一觀的道長。 經常有香客問我茵瘾,道長礼华,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任拗秘,我火速辦了婚禮圣絮,結果婚禮上,老公的妹妹穿的比我還像新娘雕旨。我一直安慰自己扮匠,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布奸腺。 她就那樣靜靜地躺著餐禁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪突照。 梳的紋絲不亂的頭發(fā)上帮非,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音讹蘑,去河邊找鬼末盔。 笑死,一個胖子當著我的面吹牛座慰,可吹牛的內容都是我干的陨舱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼版仔,長吁一口氣:“原來是場噩夢啊……” “哼游盲!你這毒婦竟也來了?” 一聲冷哼從身側響起蛮粮,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤益缎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后然想,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體莺奔,經...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年变泄,在試婚紗的時候發(fā)現(xiàn)自己被綠了令哟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恼琼。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屏富,靈堂內的尸體忽然破棺而出晴竞,到底是詐尸還是另有隱情,我是刑警寧澤役听,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布颓鲜,位于F島的核電站,受9級特大地震影響典予,放射性物質發(fā)生泄漏甜滨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一瘤袖、第九天 我趴在偏房一處隱蔽的房頂上張望衣摩。 院中可真熱鬧,春花似錦捂敌、人聲如沸艾扮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泡嘴。三九已至,卻和暖如春逆济,著一層夾襖步出監(jiān)牢的瞬間酌予,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工奖慌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抛虫,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓简僧,卻偏偏與公主長得像建椰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子岛马,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容