剑指offer 面试题18. 删除链表的节点 程序员面试金典 面试题 02.03. 删除中间节点 【链表】

面试题18. 删除链表的节点

val: int 解法

class Solution {
public:
    ListNode* deleteNode(ListNode* head, int val) {
        if(!head) return nullptr;
        if(head->val==val) return head->next;  / 头结点的情况勿忘!
        for(ListNode *node=head;node->next;node=node->next){
            if(node->next->val==val){
                node->next=node->next->next;
                break;
            }
        }
        return head;
    }
};

val: ListNode 解法:信息交换法

JAVA

class deleteNode {public static ListNode deleteNode(ListNode head, ListNode val){
        if (head == null || val == null){
            return null;
        }
        if (val.next != null){   / 待删除节点不是尾节点
            ListNode next = val.next;
            val.val = next.val;
            val.next = next.next;
        } else if (head == val){   / 待删除节点只有一个节点,此节点为头节点
            head = null;
        } else {   / 待删除节点为尾节点
            ListNode cur = head;
            while (cur.next != val){
                cur = cur.next;
            }
            cur.next = null;
        }
        return head;
    } 
}

面试题 02.03. 删除中间节点

c++两行代码解决

class Solution {
public:
    void deleteNode(ListNode* node) {
        node->val=node->next->val;
        node->next=node->next->next;
    }
};

你可能感兴趣的:(剑指offer,程序员面试金典)