首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

单链表在线OJ题二(详解+图解)

本题的意思是要删除链表中重复出现的节点,然后返回删除重复节点后的链表。 我们可以直接用一个哨兵位以便于观察链表的情况,然后用前后指针来解决这个问题。如果当前节点cur的值与其当前节点的next的所存储的值相等(且cur的next不为空),cur就变成cur的next,然后用while循环进行判断,如果cur的val与cur的next的val相等且cur的next不为空,就然后cur往后移动,直到遇到不相同的情况,跳出循环后cur还要记得移动到cur的next;然后再将前指针prev的next置为cur,这样就可以将相等的节点省略。当cur的next为空或者cur的值与cur的next的值不相等时,就直接先将prev置为cur,再将cur往后移动变成cur的next。最后返回哨兵位vpead的next,就是存储了有效数据的首节点,就可以返回整个删除后的单链表了。

01

【数据结构初阶】图文详解10道力扣链表OJ题

理解误区: 值得注意的是,这里有一个地方很容易造成思维误区,我刚开始理解的时候,我以为我是创造了一个新链表,这个新链表中的结点是没有val值的,但其实这种思维是错误的。 链表中的结点是怎么一个一个链接起来的呢?他其实就是通过记录下一个结点的地址链接起来的,如果我将原链表中想要的结点都拿出来放到一个新的链表上去,自然就得将他们的地址拿出来链接到新的链表上去。 所以尾插法的根本思想其实就是我们改掉了某些结点中next的值,修改了链表中的结点依次连接的顺序,从而产生了一个新的链表,由此也可以想到,原链表也就无法访问到了,因为我们已经将链表进行修改了。 从另一方面来谈:我们是没有malloc新的空间,所以也就不存在创造了一个新的链表这样的事情,归根溯源是我们将链表中的next进行了修改,依次达到了修改链表的目的,有些题目是不允许修改链表的,到时候我们在谈怎么解决那样的问题。

02
领券