剑指offer python版 删除链表中重复的结点

class ListNode(object):
    def __init__(self,x):
        self.val=x
        self.next=None

class Link(object):
    def __init__(self,values=None):
        self.nodes=self.set_link(values) if  values else None

    def get_link(self):
        return self.nodes
    def set_link(self,values):
        if not values :
            return False
        head=ListNode(0)
        move=head

        try:
            for i in values:
                tmp=ListNode(i)
                move.next=tmp
                move=move.next

        except Exception as e:
            print(e)

        return head.next

def deleteDuplication(self, pHead):
    first = ListNode(-1)
    first.next = pHead
    last = first
    while pHead and pHead.next:
        if pHead.val == pHead.next.val:
            val = pHead.val
            while pHead and val==pHead.val:
                pHead = pHead.next
            last.next = pHead
        else:
            last = pHead
            pHead = pHead.next
            return first.next

原文地址:https://www.cnblogs.com/xzm123/p/9849721.html

时间: 2024-10-29 13:58:16

剑指offer python版 删除链表中重复的结点的相关文章

《剑指offer》:[57]删除链表中重复的结点

题目:在一个排序的链表中,如何删除重复的结点? 例如,在图a中重复结点被删除之后,链表如图b所示. 方案:这个题应该说是比较简单的,不在赘述,主要利用三个指针,就可以解决这个问题. 具体实现代码: #include <iostream> using namespace std; struct ListNode { int data; ListNode *next; }; ListNode *pHead=NULL; ListNode *pEnd=NULL; void CreateList() {

【剑指offer】18.删除链表中重复节点

思路 实现 /* 说下大概思路: 与链表的其他题目类似,为了防止删除头结点的极端情况发生,先创建空结点dummy,使dummy指向传入的head结点. 然后创建cur的指针,指向链表的头部(即dummy). 接着对cur指针迭代,因为要对比cur(cur最初始的定义指向空结点)指针的下一个结点与下下一个结点的值是否相等,为了防止产生空指针异常,故退出迭代的条件为:cur.next != null && cur.next.next != null. 在迭代过程中,如果cur.next.val

剑指offer python版 反转链表

class ListNode(object): def __init__(self,x): self.val=x self.next=None class Link(object): def __init__(self,values=None): self.nodes=self.set_link(values) if values else None def get_link(self): return self.nodes def set_link(self,values): if not v

删除链表中重复的结点-剑指Offer

删除链表中重复的结点 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 思路 需要两个指针,一个指向前一个节点preNode,另一个指向当前节点node,如果遇到相等的节点,node向后移动,preNode不动,存下node.val方便后面的比较,直到遇到node和node.next不相等,preNode就可以指向node.n

剑指offer-18-2. 删除链表中重复的结点

剑指offer-18-2. 删除链表中重复的结点 链表 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 思路: 采用递归的方法查找从头节点开始重复的节点 如果没有重复节点,pHead.next指向deleteDuplication(pHead.next)返回的pHead.next本身 如果有重复节点则pHead.next指向pHead

剑指offer(四十三)之删除链表中重复的结点

题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 代码1: import java.util.*; public class Solution { public ListNode deleteDuplication(ListNode pHead) { if(pHead == null) return null; //定义一个链

剑指Offer——删除链表中重复的结点

题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 分析: 因为已经排好序了,所以如果相邻的数值一样的话,那么就跳过该数值,不过要记录前一结点的指针,将其next指向后一个没有重复的结点. 代码: 1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 Li

[剑指offer] 56. 删除链表中重复的结点

题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 思路: class Solution { public: ListNode *deleteDuplication(ListNode *pHead) { if (pHead == NULL || pHead->next == NULL) return pHead; List

删除链表中重复的结点(剑指offer)

题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 方法一:递归 两种情况,如果是重复结点怎么办?遇到了就跳过,返回重复节点的下一个结点. 遇到不重复结点?遇到不重复结点直接连上. /* public class ListNode { int val; ListNode next = null; ListNode(int val