0 本文是作者自己整理看的笔记,可能对其他人帮助很少
1 小亮点(技巧)
1.1 在数据间有“,”输出时,与其处理最后一个元素(最后一个元素不加“,”),不如在第一个元素上加限定条件(第一个元素左边不加“,”,其它元素都在左边加”,“)。
注:”,“逗号一般为英文逗号
1.2 在1.1中的处理,一般被当作处理头元素比处理尾部元素要容易(删除之类等等),链表就是优先处理头元素
1.3 用画图的方法来整理自己的思路
2 leetcode 报错:member access within null pointer of type 'struct ListNode'
在网上查,问题为:可能使用空指针
在代码上废了一番功夫,在 head->next 上发现可能。如果 head 是空指针 NULL,那么 head->next 就是空指针的 next。而 NULL 不是结构体,不存在自己创建的结构体中的元素 next。所以会报错。
解决方法,如果 head 不为 NULL,使用 head->next 即可(把 head->next 放进 if 中进行约束)
3 83题我自己的代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
struct ListNode* tmp1;
struct ListNode* tmp2 = NULL;
struct ListNode* delNode;
struct ListNode* iNode;
tmp1 = head;
if(head != NULL)
tmp2 = tmp1->next;
while(tmp2 != NULL)
{
if(tmp1->val == tmp2->val)
{
delNode = tmp2;
tmp2 = tmp2->next;
tmp1->next = tmp2;
free(delNode);
}
else if(tmp1->val != tmp2->val)
{
tmp2 = tmp2->next;
tmp1 = tmp1->next;
}
}
iNode = head;
while(iNode != NULL)
{
if(iNode == head)
{
printf("%d",iNode->val);
}
else
{
printf(",%d",iNode->val);
}
iNode = iNode->next;
}
return head;
}
end。你的点赞和关注是我发帖的动力,谢谢。