链表数据结构的定义:
示意图:
单向链表:
节点的定义:
typedef struct node {
int data;
struct node *next;
}NODE;
NODE是一个 struct node 类型的数据结构,里面包含两个数据,一个整型数据,一个指针(指向同类型)
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {} //构造函数 ListNode()可以定义一个链表节点
};
链表类的实现:
class LinkList
{
public:
LinkList() { head = NULL; }
~LinkList();
bool clearSqList();
bool isEmpty() { return head == NULL; }
int Length();
void GetElem(int i, int *e);
int LocateElem(int e);
bool PriorElem(int cur_e, int *pre_e);
bool NextElem(int cur_e, int *next_e);
bool Insert(int i, int e);
bool Delete(int i, int *e);
NODE * Reverse();
private:
NODE *head;
};
链表排序:
class Solution {
public:
ListNode *selectSortList(ListNode *head) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
//选择排序
if(head == NULL || head->next == NULL)return head;
ListNode *pstart = new ListNode(0);
pstart->next = head; //为了操作方便,添加一个头结点
ListNode*sortedTail = pstart;//指向已排好序的部分的尾部
while(sortedTail->next != NULL)
{
ListNode*minNode = sortedTail->next, *p = sortedTail->next->next;
//寻找未排序部分的最小节点
while(p != NULL)
{
if(p->val < minNode->val)
minNode = p;
p = p->next;
}
swap(minNode->val, sortedTail->next->val);
sortedTail = sortedTail->next;
}
head = pstart->next;
delete pstart;
return head;
}
};