题目
存在一个按升序排列的链表,给你这个链表的头节点 head,请你删除所有重复的元素,使每个元素 只出现一次 。然后返回同样按升序排列的结果链表。如下示例所示:
输入:head = [1,1,2]
输出:[1,2]
解决思路
命令指针p指向链表的头节点,然后判断p的下一个节点的值和p节点的值是否相等,若相等,则删除p的下一个节点,如果不相等,则将p向下移动一位,然后继续判断。
代码
- C++代码
# include <stdio.h>
struct ListNode {
int val;
ListNode *next;
ListNode(): val(0), next(nullptr) {}
ListNode(int val): val(val), next(nullptr) {}
ListNode(ListNode *next): val(0), next(next) {}
ListNode(int val, ListNode *next): val(val), next(next) {}
};
class Solution {
public:
ListNode *deleteDuplicates(ListNode* head) {
if (nullptr == head) {
return head;
}
ListNode *p = head;
while (p->next) {
if (p->val == p->next->val) { // 判断p节点的值和p节点的下一个节点的值是否相等
p->next = p->next->next;
} else {
p = p->next; // 若p节点的值和p的下一个节点的值不相等,将p向下移动一位
}
}
return head;
}
};
int main() {
ListNode *a = new ListNode(1);
ListNode *b = new ListNode(1);
ListNode *c = new ListNode(2);
ListNode *head = a;
a->next = b;
b->next = c;
printf("before delete: ");
while (head) {
printf("%d ", head->val);
head = head->next;
}
printf("\n");
head = a;
Solution *solution = new Solution();
ListNode *ret = solution->deleteDuplicates(head);
printf("after delete: ");
while (ret) {
printf("%d ", ret->val);
ret = ret->next;
}
return 0;
}
- python代码
# -*- coding: utf-8 -*-
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
if not head:
return head
p: ListNode = head
while p.next:
if p.val == p.next.val: # 判断p节点的值和p节点的下一个节点的值是否相等
p.next = p.next.next
else: # 若p节点的值和p的下一个节点的值不相等,将p向下移动一位
p = p.next
return head
def main():
a: ListNode = ListNode(1)
b: ListNode = ListNode(1)
c: ListNode = ListNode(2)
head: ListNode = a
a.next = b
b.next = c
print("before delete: ", end='')
while head:
print(head.val, end=' ')
head = head.next
print()
head = a
solution: Solution = Solution()
ret: ListNode = solution.deleteDuplicates(head)
print("after delete: ", end='')
while ret:
print(ret.val, end=' ')
ret = ret.next
return
if __name__ == "__main__":
main()
说明
- 对应LeetCode第83题。
- 链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/