剑指18 删除链表节点

  • 此题的一个技巧:为链表附增一个表头节点,方便将所有节点进行统一处理

    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 ListNode deleteNode(ListNode head, int val) {
    11. // 为链表附增一个头节点
    12. ListNode pHead = new ListNode(-1);
    13. pHead.next = head;
    14. ListNode p = pHead;
    15. while (p.next.val != val)
    16. p = p.next;
    17. p.next = p.next.next;
    18. return pHead.next;
    19. }
    20. }
    1. /**
    2. * Definition for singly-linked list.
    3. * type ListNode struct {
    4. * Val int
    5. * Next *ListNode
    6. * }
    7. */
    8. func deleteNode(head *ListNode, val int) *ListNode {
    9. preHead := new(ListNode)
    10. preHead.Next = head
    11. p := preHead
    12. for p != nil && p.Next.Val != val {
    13. p = p.Next
    14. }
    15. if p != nil {
    16. p.Next = p.Next.Next
    17. }
    18. return preHead.Next
    19. }