您的位置:首页 > 其它

删除已排序单链表中重复的元素

2016-05-06 17:59 501 查看
/*

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,

Given 1->1->2, return 1->2.

Given 1->1->2->3->3, return 1->2->3.

Subscribe to see which companies asked this question

*/

对于已经排好序的link-list,这样的删除还是很简单。

先记录当前的值为head->val,然后往后逐一判断,在nextnode为空时结束。

如果nextnode->val跟当前值相等,则prenode->next = nextnode->next即删除掉,然后nextnode=prenode->next。

如果nextnode->val跟当前值不等(一定是大于),则重置当前值为nextnode->val,并且prenode=nextnode, nextnode=nextnode->next。

struct ListNode {

int val;

struct ListNode *next;

};

struct ListNode* deleteDuplicates(struct ListNode* head) {

if (head == NULL || head->next == NULL) {

return head;

}

struct ListNode* prenode = head;

struct ListNode* nextnode = head->next;

int curval = head->val;

while(nextnode) {

if (nextnode->val == curval) {

prenode->next = nextnode->next;

nextnode = prenode->next;

}

else {

curval = nextnode->val;

prenode = nextnode;

nextnode = nextnode->next;

}

}

return head;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: