@XQF
2018-03-07T14:50:29.000000Z
字数 1614
阅读 1191
数据结构与算法
就是遍历出所有数据放入Set。然后重新建表,,,。,。
class ListNode {int val;ListNode next;public ListNode(int val) {this.val = val;}}public class Test {// 获取有的链表重复public static ListNode getListNode() {ListNode head = null;ListNode p = null;for (int i = 0; i < 10; i++) {if (head == null) {head = new ListNode(i);p = head;} else {ListNode node = new ListNode(i);p.next = node;p = p.next;}}ListNode node = new ListNode(3);p.next = node;return head;}//打印链表public static void print(ListNode head) {while (null != head) {System.out.print(head.val + " ");head = head.next;}}public static void main(String[] args) {// print(getListNode());ListNode list = getListNode();print(list);//去重Set<Integer> set = new HashSet<>();ListNode head = list;while (null != head) {set.add(head.val);head = head.next;}System.out.println();//重建ListNode p = null;for (Integer i : set) {ListNode node = new ListNode(i);if (p == null) {p = node;head = p;} else {head.next = node;head = head.next;}}print(p);}}
public static void main(String[] args) {// // print(getListNode());ListNode list = getListNode();print(list);// //去重Set<Integer> set = new HashSet<>();ListNode head = list;while (head != null) {if (set.contains(head.next.val)) {head.next = head.next.next;} else {set.add(head.val);}head = head.next;}System.out.println();print(list);}
关于跳中间一个找前一个点。前一个点就是当前点,当前的next不为空的情况下分两种情况,一种是当前点的.next.next仍不为空,说明可以跳过,若为空,说明这是表尾。直接把当前点的next置空就可以了。
public static void main(String[] args) {// print(getListNode());ListNode list = getListNode();print(list);//去重ListNode p=list;ListNode q=list;while(null!=p){q=p;while(null!=q.next){if(p.val==q.next.val){q.next=q.next.next;}else {q=q.next;}}p=p.next;}System.out.println();print(list);}
