给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例 1:
输入:head = [1,1,2]
输出:[1,2]
示例 2:
输入:head = [1,1,2,3,3]
输出:[1,2,3]
提示
链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序排列
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head){
if(head==NULL||head->next==NULL){
return head;
} else{
struct ListNode* pFront=head;
struct ListNode* p = head->next;
while(p->next!=NULL){
if(pFront->val==p->val){
pFront->next=p->next;
free(p);
}else{
pFront=p;
p=p->next;
}
}
}
return head;
}
正确代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head){
//head 头指针里面没有数值
struct ListNode* p =head;
while(p&&p->next){
if(p->val==p->next->val){//有重复的
p->next=p->next->next;
}else{
p=p->next;
}
}
return head;
}
其他知识扩充:strlen()
计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
#include<stdio.h>
#include<stdlib.h>
int main() {
printf("占%d个字节\n", strlen("我爱你!"));
return 0;
}
//strlen函数求得的字符串长度是从字符串第一个元素到第一个'\0'之间元素的个数(如果字符串中间有'\0',则结果不是整个字符串的长度),同时不包括该'\0'
//strlen()的一种实现就是遍历字符串,遇到'\0'就终止,因而返回的结果是第一个'\0'前字符元素的个数
//sizeof 常用来求变量占用内存空间的大小,因而它返回的是存储字符串的变量所占用的内存空间大小