/*
* 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
* 例如,链表1->2->3->3-4->4->5 处理后为 1->2->5
* 递归思想
*/
class ListNode {
int val;
ListNode next = null;
ListNode(int val){
this.val = val;
}
}
public class DeleteDuplication {
//递归法
public ListNode deleteDuplication(ListNode pHead) {
if(pHead == null || pHead.next == null) {
return pHead;
}
if(pHead.val == pHead.next.val) {
ListNode node = pHead.next;
//找到与头结点值相同的所有结点,直到出现一个与头结点值不等的一个结点,把它赋给头结点
while(node != null && node.val == pHead.val) {
node = node.next;
}
pHead = deleteDuplication(node);
}
else {
pHead.next = deleteDuplication(pHead.next);
}
return pHead;
}
public static void main(String[] args) {
ListNode node = new ListNode(1);
node.next = new ListNode(2);
node.next.next = new ListNode(3);
node.next.next.next = new ListNode(3);
node.next.next.next.next = new ListNode(4);
ListNode node2 = new DeleteDuplication().deleteDuplication(node);
while(node2 != null) {
System.out.println(node2.val);
node2 = node2.next;
}
}
}
删除单链表中重复的结点
于 2018-02-06 10:12:15 首次发布