单向链表的去重
问题描述及分析
给定一个有序的链表,去除重复出现的元素,使每个元素只出现一次。例如一个单向链表为 1->1->2->2->3->4->4->∅ , 那么去重后得到的单向链表为 1->2->3->4->∅ 。
这里的链表保证是有序的,所以出现的重复元素都是相邻的,所以对整个链表进行一次遍历,在遍历的过程中删除这些相邻的重复元素即可。
首先,需要一个遍历指针 t 指向当前遍历到的节点,然后定义两个指针分别为 p1 和 p2,p1 指向 t 所指向的节点,而 p2 指向此时 p1 的下一个节点,如果 p2 指向节点的值与 p1 的相同,那么直接让 p1 的 next 跳过 p2 指向 p2 的 next 即可。有可能存在相邻很多个元素都相等,所以可以加一个循环,一次性删除多个和 p1 指向的节点的值相等的节点。