有一个带头结点的单链表L,用c语言设计一个算法使其递增有序
时间: 2023-12-25 17:47:01 浏览: 146
1. 首先判断链表是否为空或只有一个节点,如果是,则直接返回。
2. 定义两个指针p和q,分别指向头结点和第一个节点。
3. 从第二个节点开始遍历链表,每次将节点插入到已经排好序的链表中。
4. 在遍历过程中,如果当前节点的值小于等于前一个节点的值,则从头结点开始,寻找插入位置。
5. 插入节点时,先将当前节点的next指针指向插入位置的下一个节点,再将插入位置的next指针指向当前节点。
6. 遍历完所有节点后,链表就变成了递增有序的链表。
以下是代码实现:
```
void sortList(Node* head){
if(head == NULL || head->next == NULL) //链表为空或只有一个节点,直接返回
return;
Node *p = head->next;
Node *q = p->next;
p->next = NULL; //将第一个节点单独拎出来,作为已经排好序的链表
while(q != NULL){
Node *temp = q->next; //保存下一个节点
if(q->data < p->data){ //如果当前节点小于第一个节点,则从头开始寻找插入位置
q->next = p;
head->next = q;
p = head->next;
}
else{
Node *cur = p;
while(cur->next != NULL && cur->next->data < q->data){ //寻找插入位置
cur = cur->next;
}
q->next = cur->next; //插入节点
cur->next = q;
}
q = temp; //继续遍历下一个节点
}
}
```
阅读全文