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

来源:互联网 发布:java界面布局类型 编辑:程序博客网 时间:2024/06/05 22:47
题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5


package 从50题数组中重复的数字开始;import 从50题数组中重复的数字开始.链表中环的入口节点.ListNode;public class 删除链表中重复的节点 { public static class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}public static void main(String[] args) {// TODO Auto-generated method stubListNode node1 = new ListNode(1);ListNode node2 = new ListNode(2);ListNode node3 = new ListNode(3);ListNode node4 = new ListNode(3);ListNode node5 = new ListNode(4);ListNode node6 = new ListNode(4);ListNode node7 = new ListNode(5);node1.next=node2;node2.next=node3;node3.next=node4;node4.next=node5;node5.next=node6;node6.next=node7;ListNode head = deleteDuplication(node1);//ListNode head = node1;while (head!=null) {System.out.print(head.val+",");head = head.next;}}    public static ListNode deleteDuplication(ListNode pHead)    {    if (pHead==null) {return pHead;}    ListNode pre = new ListNode(-1);//创建一个头结点,防止题给节点开始就重复,被删除    if (pre.val==pHead.val) {//防止题给头结点值也为-1pre.val = -2;}    pre.next = pHead;    ListNode head = pre;//等下要返回需要的头结点    ListNode current = pHead;//从头结点开始遍历    while (current!=null&¤t.next!=null) {    if (current.val==current.next.val) {int val = current.val;while (current!=null&¤t.val==val) {current= current.next;pre.next = current;}}else {pre=current;current=current.next;}}    return head.next;    }}


原创粉丝点击