剑指offer面试题57 删除链表中重复的结点
2017-07-20 20:30
447 查看
解题思路:
设置三个指针,分别是pre,current,later,pre初始值设为null,current指向头结点,later始终指向current的下一个结点。当current指向结点元素与later指向元素不等时,current后移;当current指向结点元素与later指向元素相等时,则一直后移current与later,直到current与later指向元素不等为止。此时更新指针指向,即删除链表中重复节点。
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
if (pHead == null) {
System.out.println("链表不存在");
return null;
}
//
ListNode pre = null;
ListNode current = pHead;
while (current != null) {
ListNode later = current.next;
if (later != null) {
if (current .val != later.val) {
pre = current;
current = current.next;
} else {
while (current != null && later != null && current.val == later.val ) {
current = current.next;
later = later.next;
}
//此时循环结束时,current指向重复数字的最后一个,later指向第一个数字
//断开指针的连接
if (pre != null) {
pre.next = later;
current = later;
} else {
pHead = later;
current = later;
}
}
} else {
//later == null时,
current = current.next;
}
}
return pHead;
}
}
设置三个指针,分别是pre,current,later,pre初始值设为null,current指向头结点,later始终指向current的下一个结点。当current指向结点元素与later指向元素不等时,current后移;当current指向结点元素与later指向元素相等时,则一直后移current与later,直到current与later指向元素不等为止。此时更新指针指向,即删除链表中重复节点。
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
if (pHead == null) {
System.out.println("链表不存在");
return null;
}
//
ListNode pre = null;
ListNode current = pHead;
while (current != null) {
ListNode later = current.next;
if (later != null) {
if (current .val != later.val) {
pre = current;
current = current.next;
} else {
while (current != null && later != null && current.val == later.val ) {
current = current.next;
later = later.next;
}
//此时循环结束时,current指向重复数字的最后一个,later指向第一个数字
//断开指针的连接
if (pre != null) {
pre.next = later;
current = later;
} else {
pHead = later;
current = later;
}
}
} else {
//later == null时,
current = current.next;
}
}
return pHead;
}
}
相关文章推荐
- 【剑指Offer学习】【面试题57:删除链表中重复的结点】
- 【剑指Offer】面试题57:删除链表中重复的结点
- 【剑指Offer】面试题57:删除链表中重复的结点
- 剑指offer 面试题57 删除链表中重复的结点
- 剑指offer面试题[57]-删除链表中重复的结点
- 【剑指offer】题57:删除链表中的重复的结点
- 剑指offer57 删除链表中重复的结点
- 剑指Offer面试题57:删除重复链表 Java实现
- 剑指offer-删除链表中重复的结点
- 剑指offer-面试题57:删除链表中重复的结点
- 剑指offer代码分析——面试题13在O(1)内删除链表结点
- 剑指offer之面试题13在O(1)时间删除链表结点
- 【剑指Offer学习】【面试题13 :在O(1)时间删除链表结点】
- 剑指offer-57:删除链表中重复节点
- 剑指Offer----面试题13:在O(1)时间删除链表结点
- 剑指offer代码分析——面试题13在O(1)内删除链表结点
- 剑指offer—删除链表中重复的结点
- 剑指offer-面试题57-删除链表中重复的结点
- 【剑指offer】面试题13:在O(1)时间删除出链表结点
- 面试题57:删除链表中重复的结点