往有序链表的插入元素使原链表依旧有序
程序员文章站
2022-07-15 16:02:22
...
/*
在有序链表中插入元素时,最好设置两个指针,一前一后,
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;
}