標籤:clu return element getc 實現 problems getch tmp lag
題目連結:https://pintia.cn/problem-sets/434/problems/5726
1.如果題目沒有給我們建好原遞增序列的鏈表,那麼我們可以考慮在建立原鏈表時插入需要插入的結點,就是在建立原鏈表時,每讀入一個資料,將該資料與待插入的資料相比較,如果發現待插入資料小於等於剛讀入的資料,那麼就先把需要插入的資料產生的結點連結到表尾,再把剛讀入的資料結點連結到表尾,然後繼續鏈表的建立,但是為了防止需要插入資料的反覆插入,我們需要設定一個標誌flag = 0; 插入完成後就將這個flag置為1,這樣就不會反覆插入了。
下面是這個想法的實現代碼:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef int ElementType; 5 typedef struct Node* List; 6 struct Node{ 7 ElementType Data; 8 List Next; 9 };10 11 int main()12 {13 int N, M, dt, flag;14 flag = 0;15 List front, rear, tmp;16 front = rear = (List)malloc(sizeof(struct Node));17 18 scanf_s("%d %d", &N, &M);19 getchar();20 21 if (N == 0) //如果原鏈表為空白,直接插入22 {23 tmp = (List)malloc(sizeof(struct Node));24 tmp->Data = M;25 tmp->Next = NULL;26 rear->Next = tmp;27 rear = tmp;28 }29 30 while (N--) //如果原鏈表不為空白,在建表時插入31 {32 scanf_s("%d", &dt);33 getchar();34 if (M <= dt && flag == 0)35 {36 flag = 1;37 tmp = (List)malloc(sizeof(struct Node));38 tmp->Data = M;39 tmp->Next = NULL;40 rear->Next = tmp;41 rear = tmp;42 }43 tmp = (List)malloc(sizeof(struct Node));44 tmp ->Data = dt;45 tmp -> Next = NULL;46 rear -> Next = tmp;47 rear = tmp;48 }49 tmp = front -> Next;50 for (;tmp->Next; tmp = tmp->Next)51 printf("%d ", tmp->Data);52 printf("%d\n", tmp->Data);53 54 55 return 0;56 }
2.下面是這題的常規解法:
1 List Insert(List L, ElementType X) 2 { 3 List PreNode, InsNode; 4 PreNode = L; 5 for (; PreNode->Next && PreNode->Next->Data < X; PreNode = PreNode->Next); 6 InsNode = (List)malloc(sizeof(struct Node)); 7 InsNode->Data = X; 8 InsNode->Next = PreNode->Next; 9 PreNode->Next = InsNode;10 return L;11 }
2-4 遞增鏈表的插入