设计一个算法使元素递增有序

考研例题:有一个带头结点的单链表L,设计一个算法使元素递增有序
思想:采用直接插入排序的思想,先构成只含有一个数据结点的有序单链表,然后依次扫描单链表中的剩下结点p(直至p==NULL)为止,在有序表通过比较查找插入p的前驱结点pre,然后将p插入到*pre之后。

本题代码:

void Sort(LinkList &L)
{
        LNode *p=L->next,*pre;
        LNode *r=p->next;          //r保持*p后继节点指针,保证不断链
        p->next=NULL;               //构造只含有一个数据结点的有序表
        p=r;
        while(p!=NULL)
        {
                r=p->next;        //保存*p的后继节点指针
                pre=L;
                while(pre->next!=NULL&&pre->next->data<p->data)
                        pre=pre->next;    //在有序表中查找插入*p的前驱结点*pre
                p->next=pre->next;         //将*p插入到*pre之后
                pre->next=p;
                p=r;                          //扫描单链表中的剩下的结点
        }
}
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!根据您的描述,您需要设计一个带头结点的单链表,并实现一个算法来使其元素递增有序。 下面是一个可能的实现方式: ```python # 定义链表节点类 class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next # 定义链表类 class LinkedList: def __init__(self): self.head = ListNode() # 在链表末尾插入元素 def insert(self, val): curr = self.head while curr.next and curr.next.val < val: curr = curr.next new_node = ListNode(val) new_node.next = curr.next curr.next = new_node # 输出链表元素 def __str__(self): curr = self.head.next res = [] while curr: res.append(curr.val) curr = curr.next return "->".join(map(str, res)) ``` 在这个实现中,我们首先定义了一个链表节点类 ListNode,其中包含了节点的值和下一个节点的引用。然后定义了一个链表类 LinkedList,其中包含了头结点,并实现了 insert 方法来将元素插入到链表中。在 insert 方法中,我们首先找到插入位置,并创建一个新的节点,将其插入到链表中。最后,我们还实现了 __str__ 方法,用于输出链表元素。 可以使用以下代码来测试这个实现: ```python # 创建链表 linked_list = LinkedList() # 插入元素 linked_list.insert(3) linked_list.insert(1) linked_list.insert(2) linked_list.insert(5) linked_list.insert(4) # 输出链表 print(linked_list) # 1->2->3->4->5 ``` 希望这个实现能够满足您的需求!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值