有序循环链表的插入(数据由小到大)

1. 判断是不是只有一个头结点
2. 插入的元素是最小元素
3. 插入的元素在中间或者为最大者**

注:头结点需分配动态内存;插入的元素也要分配动态内存

#include<iostream>
using namespace std;

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

TNode* insertNum(TNode* head, int num)
{
    TNode* node = new TNode;
    node->data = num;
    node->next = NULL;

    /*   第一种情况:只有一个头结点  */
    if ( head ->next == head )
    {
       head->next=node;
       node->next= head;
       return head;

    }

    /*   第二种情况:插入的元素值为最小值  */
    if (head->next->data > num)
    {
        node->next=head->next;
        head->next = node;
        return head;
    }

    TNode* pre = head;
    TNode* cur = head->next;

    /*   第三种情况: 插入的值在中间或者为最大值( cur=head) */
    while (  cur->data < num && cur != head )
    {
        pre = cur;
        cur = cur->next;
    }

    //插入
    node->next = cur;
    pre->next = node;

    return head;
}


int main()
{

    TNode* head=new TNode;
    head->data=0;
    head->next=head;
    int A[] = { 0, 11, 3, 4, 3, 2, 10, 44 };
    int len = sizeof(A) / sizeof(A[0]);

    for (int i = 0; i < len; i++)
    {
         head = insertNum(head, A[i]);
     }

    int i = 0;
    for (TNode* cur = head->next; i < len; cur = cur->next,i++)
          cout << cur->data<<endl;

     return 0;  

}

猜你喜欢

转载自blog.csdn.net/caozhigang129/article/details/80905836