本文共 638 字,大约阅读时间需要 2 分钟。
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。
思路:删除某个结点需要找到该结点的前一个结点,由于单向链表没有指向前一个结点的指针,所以不得不从头指针开始遍历链表。显然时间复杂度为O(n)。
(1)待删除的节点不是尾节点的情况:首先把待删除的节点的前一个节点的pre指针指向待删除的节点的后一个节点的首地址(这样就把这个节点从链表中摘出来了),然后再将这个摘出来的节点free掉即可。
(2)待删除的节点是尾节点的情况:首先把待删除的尾节点的前一个节点的pre指针指向NULL(这时候就相当于原来尾节点前面的一个节点变成了新的尾节点),然后将摘出来的节点free掉。var deleteNode = function(head, val) { let pre = new ListNode(0); // 考虑要删除的就是链表头 pre.next = head; let node = pre; // 找到被删除结点的前一个结点 while (node.next) { if (node.next.val === val) { node.next = node.next.next; break; } node = node.next; } return pre.next;};
转载地址:http://cnuvi.baihongyu.com/