您的位置:首页 > Web前端

《剑指offer》-删除单链表中重复的结点

2018-02-06 10:12 253 查看
/*
* 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
* 例如,链表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.v
4000
al) {
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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息