题解 | #删除有序链表中重复的元素#

删除有序链表中重复的元素-II

http://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024

  1. 新建一个头节点,一个指示当前结点的cur指针,一个指示前一个结点的pre指针。
  2. 对链表进行遍历:
    • ①如果当前节点和下一个结点的值相等,则记录该值,在while中判断之后结点的值是否也等于该值,是则指针前移, 直至走出重复段;
    • ②如果不相等,则把pre指向cur, 更新pre为cur, cur前移。
  3. 如果输入为{1,2,2},只进行到①,没走到过②。运行完, pre->val == 1, cur == nullptr,pre后面还连着两个结点,所以需要断链pre->next == nullptr.
/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* deleteDuplicates(ListNode* head) {
        // write code here
        if(head == nullptr || head->next == nullptr){
            return head;
        }
        ListNode* newHead = new ListNode(-1);
        newHead->next = head;
        ListNode* pre = newHead;
        ListNode* cur = head;
        while(cur){
            if(cur->next && cur->val == cur->next->val){
                int value = cur->val;
                while(cur && cur->val == value){
                    cur = cur->next;
                }
            }else{
                pre->next = cur;
                pre = cur;
                cur = cur->next;
            }
        }
        pre->next = nullptr;
        return newHead->next;
    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务