往有序链表的插入元素使原链表依旧有序

来源:互联网 发布:.net core mysql 编辑:程序博客网 时间:2024/05/17 09: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;}
原创粉丝点击