题目 : 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路 :简单 , 递归思路
1、java版本
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
if (pHead == null) {
return null;
}
if (pHead != null && pHead.next == null) {
return pHead;
}
ListNode current;
if (pHead.next.value == pHead.value) {
current = pHead.next.next;
while (current != null && current.value == pHead.value) {
current = current.next;
}
return deleteDuplication(current);
} else {
current = pHead.next;
pHead.next = deleteDuplication(current);
return pHead;
}
}
}
class ListNode {
int value;
ListNode next;
public ListNode(int x) {
value = x;
}
public String toString() {
return "HeroNode [no=" + value + "]";
}
}
2、c++版本
//
// Created by stephen on 2021/3/13.
//
#include <vector>
#include <algorithm>
using namespace std;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode *deleteDuplication(ListNode *pHead) {
if (pHead == NULL)
return NULL;
if (pHead != NULL && pHead->next == NULL)
return pHead;
ListNode *cur;
if (pHead->next->val == pHead->val) {
cur = pHead->next->next;
while (cur != NULL && cur->val == pHead->val) {
cur = cur->next;
}
return deleteDuplication(cur);
} else {
cur = pHead->next;
pHead->next = deleteDuplication(cur);
return pHead;
}
}
};