203. Remove Linked List Elements

来源:互联网 发布:java如何制作图片上传 编辑:程序博客网 时间:2024/06/13 07:06

描述:
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

给出一条单链表,删除指定值的节点,返回更新后的链表

两种解法:

1.设定一个指向头节点的node节点,再让head节点从这个前导节点开始遍历

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      

2.逐项考虑情况,主要考虑队头

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    

总结:

在遇见单项链表问题的时候,第一时间要考虑到构造一个前导指针(指向当前元素的元素),用前导指针来操作当前元素,简单明了

0 0
原创粉丝点击