給定一批嚴格遞增排列的整型數據,給定一個x,若x不存在,則插入x,要求插入后保持有序。存在則無需任何操作。
輸入格式:
輸入有兩行: 第一個數是n值,表示鏈表中有n個數據。后面有n個數,分別代表n個數據。 第二行是要插入的數。
輸出格式:
輸出插入后的鏈表數據,以空格分開。行末不能有多余的空格。
輸入樣例1:
在這里給出一組輸入。例如:
5 1 3 6 9 11
4
輸出樣例1:
在這里給出相應的輸出。例如:
1 3 4 6 9 11
輸入樣例2:
在這里給出一組輸入。例如:
5 1 3 6 9 11
3
輸出樣例2:
在這里給出相應的輸出。例如:
1 3 6 9 11
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode* next;
} LNode, * LinkList;
void CreateList(LinkList& L, int n)
{
L = new LNode;
L->next = NULL;
LNode* p = L;
int m;
for (int i = 0; i < n; i++)
{
cin >> m;
p->next = new LNode;
p = p->next;
p->data = m;
p->next = NULL;
}
}
void InsertList(LinkList& L, int n, int x)
{
LNode* p = L;
if (p->next == NULL)//這種情況下是為空鏈表直接插入節點的
{
LNode* q = new LNode;
q->data = x;
q->next = NULL;
p->next = q;
p = q;
return;
}
while (p->next != NULL)
{
LNode* temp = p;
p = p->next;
if (p->data == x) return;
if (p->data > x)
{
LNode* q = new LNode;
q->data = x;
q->next = p;
temp->next = q;
return;
}
}
LNode* q = new LNode;
q->data = x;
q->next = NULL;
p->next = q;
p = q;
return;
}
void OutputList(LinkList L)
{
LNode* p = L->next;
while (p != NULL) {
cout << p->data;
if (p->next != NULL)
cout << " ";
p = p->next;
}
}
int main()
{
int n, x;
cin >> n;
LinkList L;
CreateList(L, n);
cin >> x;
InsertList(L, n, x);
OutputList(L);
return 0;
}
同學的代碼
個人感覺寫的和清晰
值得收藏學習