Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.
Supposed the linked list is 1 -> 2 -> 3 -> 4
and you are given the third node with value 3
, the linked list should become 1 -> 2 -> 4
after calling your function.
法一:思路是:从node 节点开始,把后面节点的值赋给前面的节点,直到到表尾;
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public void deleteNode(ListNode node) { 11 ListNode pos = node.next; 12 if (pos==null) 13 node=null; 14 else { 15 while (pos!=null){ 16 node.val = pos.val; 17 pos = pos.next; 18 if (pos==null) 19 node.next = null; 20 else 21 node = node.next; 22 } 23 } 24 } 25 }
法二:将要删除节点后一个节点的值赋给要删除的节点,然后删除后一个节点。
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public void deleteNode(ListNode node) { 11 if(node.next==null){ 12 node=null; 13 return; 14 } 15 node.val = node.next.val; 16 node.next = node.next.next; 17 } 18 } 19