1.代码段1简介:删除链表重复元素
1.1.代码1
typedef int ElemType; //1
typedef struct LNode //2
{ //3
ElemType data; //4
struct LNode *next; //5
} LNode,*LinkList; //6
void deleteDuplicates(LinkList head) //7
{ //8
if(head==NULL||head.next==NULL) //9
return head; //10
LinkList p=head; //11
LinkList q=head->next; //12
while(p->next!=NULL) //13
{ //14
if(p->data==q->data) //15
{ //16
p->next=q->next; //17
q->next=NULL; //18
q=p->next; //19
continue; //20
} //21
p=q; //22
q=q->next; //23
} //24
return head; //25
} //26
1.2.不懂的地方
第18行,在第18行将q->next赋予NULL。因为在第19行已经将q=p->next,所以不非常清楚这步的目的。目前我认为该步的目的是断开q的next将节点释放。
2.代码段2简介:单链表排序
2.1 代码1
void sortList(node *head) //1
{ //2
int len = lenList(head); //3
cout << "len:" << len << endl; //4
if (len == 0) //5
return; //6
node *p = head; //7
int i, j, tmp; //8
for (i = 0; i < len - 1; i++){ //9
p = head; //10
for (j = 0; j < len -i -1; j++){ //11
if (p->data > p->next->data){ //12
tmp = p->data; //13
p->data = p->next->data; //14
p->next->data = tmp; } //15
p = p->next;} //16
} //17
} //18
2.2 不懂的地方
第9行至第18行,太久没做排序题,刚开始没看出来是冒泡排序。外层的循环仅进行到len-1为的是与后面的数据进行比较,内层循环后将最值移到序列之后。