题目 剑指offer18:删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
说明:
题目保证链表中节点的值互不相同
若使用 C 或 C++ 语言,你不需要 free
或 delete
被删除的节点
示例1:
1 2 3 输入: head = [4 ,5 ,1 ,9 ], val = 5 输出: [4 ,1 ,9 ] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
示例2:
1 2 3 输入: head = [4 ,5 ,1 ,9 ], val = 1 输出: [4 ,5 ,9 ] 解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
代码 删除的节点,分为头节点和非头节点两种情况,对两种情况需要进行不同的处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Solution { public ListNode deleteNode (ListNode head, int val) { if (head.val == val) return head.next; ListNode pre = head; ListNode cur = head.next; while (cur !=null && cur.val != val){ pre = cur; cur = cur.next; } if (cur.val == val){ pre.next = cur.next; } return head; } }
随笔 代码测试 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 public static void main (String[] args) { ListNode head = new ListNode(4 ); ListNode firstNode = new ListNode(5 ); ListNode secondNode = new ListNode(1 ); ListNode thirdNode = new ListNode(9 ); head.next = firstNode; firstNode.next = secondNode; secondNode.next = thirdNode; thirdNode.next = null ; ListNode outLink =deleteNode(head,5 ); System.out.print("[" ); while (outLink != null ){ if (outLink.next != null ){ System.out.print(outLink.val+"," ); outLink = outLink.next; }else { System.out.print(outLink.val); outLink = outLink.next; } } System.out.print("]" ); }