public class Solution1 {
/**
* @param head 链表
* @return 链表头
*/
public static ListNode deleteDuplicates(ListNode head) {
//链表的长度小于等于1,直接返回
if(head == null || head.next == null){
return head;
}
//前面的指针
ListNode front = head;
//后面的指针
ListNode rear = head.next;
//保留结果的链表
ListNode listNode = new ListNode(0);
ListNode result = listNode;
//记录链表中相同值出现的次数,默认1
int count = 1;
while(front != null && rear != null){
//两个节点的值相同
if(front.val == rear.val){
count++;
}else{
//count=1说明这是没有重复的值
if(count == 1){
listNode.next = front;
listNode = listNode.next;
}
count = 1;
}
front = front.next;
rear = rear.next;
}
if(rear == null && count == 1){
listNode.next = front;
listNode = listNode.next;
}
listNode.next = null;
return result.next;
}
public static void main(String[] args){
ListNode list = new ListNode(0);
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(1);
ListNode node3 = new ListNode(2);
ListNode node4 = new ListNode(3);
ListNode node5 = new ListNode(3);
ListNode node6 = new ListNode(3);
ListNode node7 = new ListNode(5);
list.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = node6;
node6.next = node7;
ListNode node = deleteDuplicates(list);
while (node != null){
System.out.println(node.val);
node = node.next;
}
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现的数字。Java双指针实现
最新推荐文章于 2022-07-25 14:53:04 发布