www.ypnh.net > 有一个带头结点的单链表L,设计一个算法使其元素递增有序排列

有一个带头结点的单链表L,设计一个算法使其元素递增有序排列

/* 插入排序法 */ void sort(Linklist *&L) { LinkList *p=L->next, *q, *r; if(p!=NULL) { /* 把链表分成两条,一条已经排序好了(L),一条待排序(p)*/ r=p->next; p->next=NULL; p=r; /* 对于所有待排序的元素 */ while(p!=NULL) { /*把p链表的第一个

这个其实是在单键表中实现直接插入的排序算法,外循环是将单链表中的每个结点的数据作入一个有序的单链表里,内循环主要作用是找到第一个不再大于待插入结点数据的前驱,以便将待排序结点插入.

linknode last = null; while(l.hasnext()) { node = l.next(); node newnode = node.clone(); newnode.setnext(last); last = newnode; } return last; //last是逆置的链表的头结点

既然是数据结构,就写伪代码可以了.基本思路:从首元(头结点指向的节点)开始,依次查看是此节点的数据否有下一个节点的数据大,如果存在一个节点的数据比下一个节点大,说明不是递增.反之如果考察到最后一个节点之前都比下一个

node *ha, *t, *pa; // 初始化,ha 是头节点 pa = ha; while (*pa) { if (*pa > minv && *pa next; pa->next = t->next; free(t); //释放pa内存 } pa ++; }

void Insert(ListNode *head, int x) {// 设为有头结点,成员和类型名请按自己的实际情况修改 ListNode *p, *q; p = head->next; q = head; while (p != NULL && p->data < x) { q = p; p= p->next; } p = (ListNode *)malloc(sizeof(ListNode)); p->data = x; p->next = q->next; q->next = p; }

struct node { /* 单链表类型声明 */ elemtype data; /* 数据域 */ struct node *next; /* 指针域 */ }; void reverse(node *head) { /* 从第一结点开始颠倒 */ node *p, *q; p = head->next; /* p 指向第一个结点 */ head->next = null; /* 断开链表表头 */ while (p != null) { q = p; p = p->next; /* 当前结点指针后移 */ q->next = head->next; /* 表头插入 */ head->next = q; } }

LinkNode last = null;while(L.hasNext()) { node = L.next(); Node newnode = node.clone(); newnode.setNext(last); last = newnode;}return last; //last是逆置的链表的头结点

复制该链表,然后每次取第一个和最后一个元素,判断是否相等,然后删掉这两个节点,循环到链表为空或者只有一个节点为止

/* 链表节点 */typedef struct Node { int data; struct Node *next;} Node;/* 合并两个升序 next, *pb = b->next, *t; /* 新链表的头结点使用 a 的头结点 */ a->next = NULL; free(b);

网站地图

All rights reserved Powered by www.ypnh.net

copyright ©right 2010-2021。
www.ypnh.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com