往有序連結串列的插入元素使原連結串列依舊有序
阿新 • • 發佈:2018-10-31
/*
在有序連結串列中插入元素時,最好設定兩個指標,一前一後,
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;
}