在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
题目网址:https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef?
tpId=13&&tqId=11209&rp=1&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking
这道题的思路不难,我们将链表中不重复出现的数字放入新链表中,首先我们要遍历整个链表,找到第一组出现重复数字的结点,然后进行第二次遍历,遍历这组重复数字的结点,并且将他们跳过。

具体实现代码如下
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
if(pHead == null || pHead.next == null){
return pHead;
}
ListNode newHead = new ListNode(-1);
ListNode newTail = newHead;
ListNode cur = pHead;
while(cur != null){
if(cur.next != null && cur.val == cur.next.val){
while(cur.next != null && cur.val == cur.next.val){
cur = cur.next;
}
cur = cur.next;
}else{
newTail.next = new ListNode(cur.val);
cur = cur.next;
newTail = newTail.next;
}
}
return newHead.next;
}
}
方法二:HWC老铁
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
if(pHead == null || pHead.next == null){
return pHead;
}
ListNode newHead = new ListNode(-1);
newHead.next = pHead;
ListNode prev = newHead;
ListNode node = prev.next;
while(node != null){
if(node.next != null && node.val == node.next.val){
while(node.next != null && node.val == node.next.val){
node = node.next;
}
prev.next = node.next;
node = node.next;
}
else{
prev = prev.next;
node = node.next;
}
}
return newHead.next;
}
}
删除排序链表中重复元素

639





