链表例题1:删除链表中的重复结点

解题思路:

1.创建一个结点类

2.创建一个删除方法

3.使用快慢指针的思想(主要的部分)

 

代码如下:

 1 public class RemoveRepeation {
 2 
 3     public static void main(String[] args) {
 4         int data[]= {1,1,1,1,1,2,2,2,2,2,3,3,3,4,4,5,5,5,6,6,5,5,1,1,3,2,5,3,10,10};
 5         Node head=new Node(null); //创建一个头结点哑元
 6         //将元素通过链表串进来
 7         Node p=head;
 8         for(int i=0;i<data.length;i++)
 9         {
10             p.next=new Node(data[i]);
11             p=p.next;
12         }
13         
14         //删除方法的调用
15         remove(head);
16         
17         //删除后的结果输出
18         Node p1=head.next;
19         while(p1!=null)
20         {
21             System.out.print(p1.value+"  ");
22             p1=p1.next;
23         }
24     }
25     
26     
27     private static void remove(Node node) 
28     {
29         Node p1=node.next;   //当前要比较的结点
30         Node pre=node.next; //慢指针
31         Node p2=pre.next;  //快指针
32         while(p2!=null)
33         {
34             Object temp=p1.value; //存储要比较值从前往后一步一步走
35             
36             //把要比较的值与它后面的值一一比较
37             while(p2!=null)
38             {
39                 if(temp==p2.value)
40                 {
41                     //慢指针不动,快指针移动
42                     pre.next=p2.next; 
43                     p2=pre.next;
44                 }
45                 else
46                 {
47                     //快,慢指针都向前移动一下
48                     pre=p2;
49                     p2=p2.next;
50                 }
51             }
52             
53             //重新再定义快,慢指针
54             if(p1.next!=null)
55             {
56             p1=p1.next;
57             pre=p1;
58             p2=p1.next;
59             }
60         }
61     }
62     
63     //结点类
64     private static class Node
65     {
66         Node next;
67         Object value;
68         
69         public Node(Object value)
70         {
71             this.value=value;
72         }
73     }
74     
75 
76 }

结果:

 

posted @ 2018-12-31 14:34  Spider&Man  阅读(264)  评论(0编辑  收藏  举报