yujun59

博客园 首页 新随笔 联系 订阅 管理

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为的是与后面的数据进行比较,内层循环后将最值移到序列之后。

posted on 2019-03-25 18:25  yujun59  阅读(80)  评论(0编辑  收藏  举报