题解 | #牛群排列去重#

牛群排列去重

https://www.nowcoder.com/practice/8cabda340ac6461984ef9a1ad66915e4

考察知识点:排序,指针,去重

解题分析:这道题主要是就是判断链表的当前元素和接下来的元素是否相同,相同的话就把后面的元素去掉,之后将当前元素的下一个地址指向后一个元素的的下一个元素的地址。不过这里去掉的元素需要手动释放内存,否则可能出现内存泄漏。

采用的编码语言:C

完整的编码代码:如下所示

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
struct ListNode* deleteDuplicates(struct ListNode* head ) {
    struct ListNode* tmp_head = head;
    struct ListNode* next_head = head;

    while (1) {
        if (tmp_head == NULL)		// 如果当前链表成员地址为空,表明head已经到了结尾了
            break;

        if (tmp_head->next != NULL && tmp_head->val == tmp_head->next->val) {	// 如果当前成员有下一个成员的话,用当前成员的值与当前的下一个成员的值做比较
            next_head = tmp_head->next;  // 存储下一个成员的地址
            tmp_head->next = next_head->next;	// 更新当前成员的下一个地址为,next_head的下一个成员地址,以此删除相同的成员
            free(next_head);		// 释放neaxt_head
            next_head = NULL;	// 将next_head置空
        } else
            tmp_head = tmp_head->next;		// 如果不存在相同的成员,就刷新当前成员地址为下一个成员的地址
    }

    return head;
}

面试高频TOP202解析 文章被收录于专栏

采用Java,C,Python等方法去解答面试高频TOP202题目,

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务