1. 程式人生 > >往有序連結串列的插入元素使原連結串列依舊有序

往有序連結串列的插入元素使原連結串列依舊有序

/*

    在有序連結串列中插入元素時,最好設定兩個指標,一前一後,
cur指標負責比較大小,pre指標負責定位插入位置的前驅。

【關鍵點】
(1)3中情況:空連結串列、第一個值比插入元素大、非空連結串列&&第一個元素比插入元素小
(2)pre、cur指標的初始值
(3)返回值型別:連結串列指標TNode*

*/

#include<iostream>
using namespace std;

typedef struct TNode
{
    int data;
    struct TNode *next;
}TNode;

TNode*
insertNum(TNode* head, int data) { TNode *node = new TNode; node->data = data; node->next = NULL; //case1:如果是空連結串列 if (head == NULL) { return node; } //case2:如果第一個元素就比待插入元素大,直接插入node,並 //把node設為新的頭結點 if (head->data > data) { node->
next = head; return node; } //case3:如果不是空連結串列&&第一個元素不比待插入元素大 TNode* pre = head; //插入位置的前驅 TNode* cur = head->next; //用來比較大小 while (cur && cur->data < data) //查詢插入位置 { pre = cur; cur = cur->next; } //迴圈結束後,找打插入位置的前驅pre //插入元素
node->next = cur; pre->next = node; return head; } int main() { int num; TNode* head = NULL; int A[4] = { 0, 11, 3, 4 }; for (int i = 0; i < 4; i++) { head = insertNum(head, A[i]); } for (TNode* cur = head; cur!=NULL; cur = cur->next) cout << cur->data<<endl; return 0; }