您现在的位置是:首页 > 后台技术 > 数据结构与算法数据结构与算法
移除链表元素(图文)
第十三双眼睛2023-12-03【数据结构与算法】人已围观
简介移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
思路:因为链表的头节点也是可能等于目标值的,因此,先找到新的链表头,然后定义两个辅助节点,一个在前边依次检查每个节点的值是否与目标值相等,另一个节点负责把不等于目标值的节点连起来。代码如下:
思路二:递归。代码如下:
更加简单的写法:
public static ListNode method1(ListNode head,int val) { if (head == null) { return null; } ListNode current = head; ListNode newHead = null; while (current != null) { if (current.val == val) { current = current.next; } else { newHead = current; break; } } current = newHead; ListNode p = null; if (current != null) { p = current.next; } while (p != null) { if (p.val != val) { current.next = p; current = p; p = p.next; } else { p = p.next; } } if (current != null) { current.next = p; } return newHead; } |
思路二:递归。代码如下:
public static ListNode method2(ListNode head,int val) { if (head == null) { return null; } head.next = method2(head.next, val); return head.val == val ? head.next : head; } |
更加简单的写法:
public static ListNode method3(ListNode head,int val) { ListNode dummyHead = new ListNode(0); dummyHead.next = head; ListNode temp = dummyHead; while (temp.next != null) { if (temp.next.val == val) { temp.next = temp.next.next; } else { temp = temp.next; } } return dummyHead.next; } |
Tags:
很赞哦! ()