1)题目
删除排序链表中的重复元素
要求:
给定一个排序链表,删除所有重复的元素每个元素只留下一个。
样例:
样例 1:
输入: null
输出: null
样例 2:
输入: 1->1->2->null
输出: 1->2->null
样例 3:
输入: 1->1->2->3->3->null
输出: 1->2->3->null
2)思路
跳过相同的元素,指向再后一个元素。
3)代码
普通方法:
//头文件
#pragma once
#include "pch.h"
#include <iostream>
using namespace std;
#include <vector>
class ListNode
{
public:
int val;
ListNode *next;
};
class Solution
{
public:
//数组转链表
ListNode *vector2lianbiao(vector<int> nums)
{
ListNode *head, *p,*rear;
head = rear = new class ListNode;
head->val = nums[0];
rear->next = NULL;
for (int i = 1; i < nums.size(); i++)
{
p = new class ListNode;
p->val = nums[i];
rear->next = p;
rear = p;
}
rear->next = NULL;
return head;
};
//删除链表重复元素
ListNode * deleteDuplicates(ListNode * head)
{
// write your code here
ListNode *p = head;
while (p->next != NULL)
{
if (p->next->val == p->val)
{
p->next =p->next->next;
}
else
{
p = p->next;
}
}
return head;
}
//打印链表函数
void print_lianbiao(ListNode *head)
{
//ListNode *p= new class ListNode;
ListNode *p= head;
while (p != NULL)
{
cout << p->val;
cout << endl;
p = p->next;
}
cout << endl;
};
};
//主函数
#include "pch.h"
#include <iostream>
using namespace std;
#include "112.h"
#include <vector>
class Solution;
Solution function;
int main()
{
ListNode *result, *result_after;
vector<int> nums = { 1, 2, 2, 3,3, 4 };
result = function.vector2lianbiao(nums);
cout << "原链表的内容如下:" << endl;
function.print_lianbiao(result);
result_after = function.deleteDuplicates(result);
cout << "删除重复元素后的链表的内容如下:" << endl;
function.print_lianbiao(result_after);
}