网站备案得多长时间,网站建设费用还是网络,wordpress forum,国产cms题目
给定一个已排序的链表的头 head #xff0c; 删除原始链表中所有重复数字的节点#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1#xff1a; 输入#xff1a;head [1,2,3,3,4,4,5]
输出#xff1a;[1,2,5]示例 2#xff1a; 输入#xff1a;head [1…题目
给定一个已排序的链表的头 head 删除原始链表中所有重复数字的节点只留下不同的数字 。返回 已排序的链表 。 示例 1 输入head [1,2,3,3,4,4,5]
输出[1,2,5]示例 2 输入head [1,1,1,2,3]
输出[2,3]
C代码
#include iostream
using namespace std;//定义链表结构体
struct ListNode {int val;ListNode* next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode* next) : val(x), next(next) {}
};/*
* 删除排序链表中的重复节点问题
* 定义dummyNode哑节点和cur节点
* 判断cur-next和cur-next-next节点不为空
* while循环删除重复节点和节点本身
*/
ListNode* deleteDuplicates(ListNode* head) {if (!head) {return head;}ListNode* dummyNode new ListNode(0, head);ListNode* cur dummyNode;while (cur-next cur-next-next) {if (cur-next-val cur-next-next-val) {int x cur-next-val;while (cur-next cur-next-val x) {cur-next cur-next-next;}}else {cur cur-next;}}ListNode* ans dummyNode-next;delete dummyNode;return ans;
}int main() {ListNode* n1 new ListNode(1);ListNode* n2 new ListNode(2);ListNode* n3 new ListNode(3);ListNode* n4 new ListNode(3);ListNode* n5 new ListNode(4);ListNode* n6 new ListNode(4);ListNode* n7 new ListNode(5);n1-next n2;n2-next n3;n3-next n4;n4-next n5;n5-next n6;n6-next n7;n7-next nullptr;ListNode* head n1;ListNode* ans deleteDuplicates(head);while (ans) {cout ans-val ;ans ans-next;}delete n1, n2, n3, n4, n5, n6, n7;return 0;
}
分析
删除排序链表中的重复节点问题定义 dummyNode 哑节点和 cur 节点判断 cur-next 和 cur-next-next 节点不为空while 循环删除重复节点和节点本身。
问题
本来想加一个pre节点增加代码可读性但是写出来超时了不知道什么问题。