文章目录
前言
提示:这里可以添加本文要记录的大概内容:
实现链表的排序(使链表中元素的从无序到有序,要求从小到大)例如(1,6,8,3,7)(1,3,6,7,8)
实现链表的反转 例如(1,2,3,4,5,6)(6,5,4,3,2,1)
链表求相邻两个结点最大值
实现链表的排序(使链表中元素的从无序到有序,要求从小到大)例如(1,6,8,3,7)(1,3,6,7,8)
代码如下(示例):
int list_sort(linklist H){
linklist p,q,r;
if (H == NULL){
printf("H is NULL\n");
return -1;
}
if (H->next == NULL)
return 0;
p = H->next;
q = H->next->next;
r = H;
H->next = NULL;
p->next = H->next;
H->next = p;
while(q){
p = q;
q = q->next;
r = H;
while (r->next){
if (r->next->data < p->data){
r = r->next;
}else{
break;
}
}
p->next = r->next;
r->next = p;
}
return 0;
}
int main(int argc, const char *argv[])
{
linklist H;
int a[] = {1,6,8,3,7};
int i;
H = list_create(); //建立新链表
if (H == NULL)
return -1;
for (i = 0;i < sizeof(a)/sizeof(int);i++){
list_tail_insert(H,a[i]); //建立新节点、尾部插入
}
list_show(H); //遍历链表
list_sort(H);//排序
list_show(H);
list_free(H);
return 0;
}
实现链表的反转 例如(1,2,3,4,5,6)(6,5,4,3,2,1)
代码如下(示例):
int list_reverse(linklist H) {
linklist p;
linklist q;
if (H == NULL) {
printf("H is NULL\n");
return -1;
}
if (H->next == NULL || H->next->next == NULL) {
return 0;
}
p = H->next->next;
H->next->next = NULL;
while (p != NULL) {
q = p;
p = p->next;
q->next = H->next;
H->next = q;
}
return 0;
}
链表求相邻两个结点最大值
代码如下(示例):
linklist list_adjmax(linklist H, data_t *value) {
linklist p, q, r;
data_t sum;
if (H == NULL){
printf("H is NULL\n");
return NULL;
}
if (H->next == NULL || H->next->next == NULL || H->next->next->next == NULL) {
return H;
}
q = H->next;
p = H->next->next;//p = q->next;
r = q;
sum = q->data + p->data;
while (p->next != NULL) {
p = p->next;
q = q->next;
if (sum < q->data + p->data) {
sum = q->data + p->data;
r = q;
}
}
*value = sum;
return r;
}
有序链表合并
代码如下(示例):
int list_merge(linklist H1, linklist H2) {
linklist p, q, r;
if (H1 == NULL || H2 == NULL) {
printf("H1 || H2 is NULL\n");
return -1;
}
p = H1->next;
q = H2->next;
r = H1;
H1->next = NULL;
H2->next = NULL;
while (p && q) {
if (p->data <= q->data) {
r->next = p;
p = p->next;
r = r->next;
r->next = NULL;
} else {
r ->next = q;
q = q->next;
r = r->next;
r->next = NULL;
}
}
if (p == NULL) {
r->next = q;
}else {
r->next = p;
}
return 0;
}