删除链表中重复的结点

题型1 删除重复的节点,重复的节点不保留
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

需要考虑第一个节点重复的情况,所以创建一个头节点,保证头节点不会重复,头节点指向head,
两个指针,pre 和current 代表前一个节点和当前节点
利用一个标记 duplicate标记重复
循环判断条件:current不为空,循环判断current.val==current.next.val,duplicate=true,current后移
当duplicate为true,pre.next=current.next;为False,pre=next
current后移 current=current.next

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def deleteDuplication(self, pHead):
        # write code here
        first=ListNode(-1) #创建头节点
        first.next=pHead
        pre=first #前一个节点指向头节点
        current=pHead
        while current!=None:
            duplicate=False
            while current.next!=None and current.val==current.next.val:
                current=current.next
                duplicate=True
            if duplicate==True:
                pre.next=current.next
            else:
                pre=current
            current=current.next
        return first.next #相当于新的head
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public ListNode deleteDuplication(ListNode pHead)
    {
        ListNode first=new ListNode(-1);
        first.next=pHead;
        ListNode pre=first;//指向当前确定不重复的节点
        ListNode cur=pHead;//当前节点,遍历
        while(cur!=null){
            boolean duplicate=false;
            while(cur.next!=null && cur.val==cur.next.val){
                cur=cur.next;
                duplicate=true;
            }
            if (duplicate==true) pre.next=cur.next;
            else pre=cur;
            cur=cur.next;
        }
        return first.next;

题型2:删除重复节点,留一个
pre 和current,
循环条件:current不为空 pre=current,current=current.next
当current.next!=None pre.val==current.val:
删除current :pre.next=current.next,current后移

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def deleteDuplication(self, pHead):
   	 	current=pHead
		pre=None
		while current!=None:
    		while current.next!=None and pre.val==current.val:#当前值与前一个相等,删除当前
        		pre.next=current.next
        		current=current.next
        	pre=current
    		current=current.next
    	return pHead
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值