在有序鏈表中插入數據


給定一批嚴格遞增排列的整型數據,給定一個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;
}
 
 
 
 
同學的代碼 
個人感覺寫的和清晰
值得收藏學習
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM