本文共 2133 字,大约阅读时间需要 7 分钟。
描述:
Remove all elements from a linked list of integers that have value val.Example
Given: 1 –> 2 –> 6 –> 3 –> 4 –> 5 –> 6, val = 6 Return: 1 –> 2 –> 3 –> 4 –> 5给出一条单链表,删除指定值的节点,返回更新后的链表
两种解法:
class Solution {public: ListNode* removeElements(ListNode* head, int val) { ListNode* temp; temp->next = head; //设定一个前导指针 head = temp; //head现在指向它的前一个指针 while(head->next != NULL){ if(head->next->val == val){ head->next = head->next->next; } else{ head = head->next; } } return temp->next; }};
python:
class Solution(object): def removeElements(self, head, val): temp = ListNode(0) temp.next = head head = temp while head.next != None: if head.next.val == val: head.next = head.next.next else: head = head.next return temp.next
1.从头部开始的时候如果遇到相等的,直接就可以将head往更新为下一个元素。直到第一个不相等,或者NULL时,跳出循环
2.如果是为NULL就不进入循环,如果是第一个不等元素,直接判断下一个是否相等,相等temp.next = temp.next.next跳过这个相等的元素,否则temp = temp->next;继续下一个判断。class Solution {public: ListNode* removeElements(ListNode* head, int val) { while(head != NULL && head->val == val){ head = head->next; } //这里把前面的相等元素全剔除掉了,这时候的head是第一个不等于val值的,或者是为NULL ListNode* temp = head; while(temp != NULL && temp->next != NULL){ if(temp->next->val == val){ temp->next = temp->next->next; } else{ temp = temp->next; } } return head; }};
python:
class Solution(object): def removeElements(self, head, val): while head != None and head.val == val: head = head.next temp = ListNode(0) temp = head while temp != None and temp.next != None: if temp.next.val == val: temp.next = temp.next.next else: temp = temp.next return head
在遇见单项链表问题的时候,第一时间要考虑到构造一个前导指针(指向当前元素的元素),用前导指针来操作当前元素,简单明了
转载地址:http://cemmi.baihongyu.com/