Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
解题思路:新建一个链表,遍历原来链表,若不重复则将结点插入新链表,重复则跳过.为了避免遍历最后为重复结点,最后需将新链表末尾置NULL
#include<iostream>
#include<vector>
using namespace std;
//Definition for singly - linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode *deleteDuplicates(ListNode *head) {
ListNode*ResultList = new ListNode(0);
ListNode*TmpResultNode = ResultList;
ListNode*NorepeatNode = head;
while (NorepeatNode != NULL){
ListNode*PreNode = NorepeatNode;
while (NorepeatNode->next != NULL&&NorepeatNode->val == NorepeatNode->next->val)
NorepeatNode = NorepeatNode->next;
if (NorepeatNode == PreNode) //如果不重复,插入
{
TmpResultNode->next = NorepeatNode;
TmpResultNode = TmpResultNode->next;
}
NorepeatNode = NorepeatNode -> next;
}
TmpResultNode->next = NULL; //尾部置NULL
return ResultList->next;
}
本文介绍了一种算法,用于从已排序的链表中移除所有具有重复数值的节点,只保留原始列表中的唯一数值。通过创建一个新的链表并遍历原始链表,将不重复的节点插入到新链表中,从而实现这一目标。
427

被折叠的 条评论
为什么被折叠?



