題解 | #刪除鏈表的節(jié)點(diǎn)#
刪除鏈表的節(jié)點(diǎn)
http://www.fangfengwang8.cn/practice/f9f78ca89ad643c99701a7142bd59f5d
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代碼中的類名、方法名、參數(shù)名已經(jīng)指定,請勿修改,直接返回方法規(guī)定的值即可 * * * @param head ListNode類 * @param val int整型 * @return ListNode類 */ public ListNode deleteNode(ListNode head, int val) { // 1、創(chuàng)建返回結(jié)果 ListNode res = head; // 2、判斷第一個是不是要刪除的節(jié)點(diǎn) if (head.val == val) { // 第一是的話,跳過這個節(jié)點(diǎn),并返回 head = head.next; return head; } // 3、遍歷,找到要刪除的節(jié)點(diǎn) head.next.val != val 時進(jìn)入循環(huán) while (head.next.val != val) { // 不是目標(biāo)值,跳過這個節(jié)點(diǎn) head = head.next; } // 4、找到目標(biāo)值后跳出循環(huán),跳出循環(huán)向下執(zhí)行,說明鏈表當(dāng)前值與val相等,執(zhí)行鏈表刪除操作。 // 說明:因?yàn)樵趙hile循環(huán)中head指向了下一個節(jié)點(diǎn),所以此時head表示為前一個節(jié)點(diǎn),head.next表示為目標(biāo)節(jié)點(diǎn),head.next.next 表示下一個節(jié)點(diǎn) // 所以,將前一個節(jié)點(diǎn)的next直接連接到下一個節(jié)點(diǎn),達(dá)到了刪除節(jié)點(diǎn)的效果, head.next = head.next.next; return res; } }
注意res的作用: 只有當(dāng)head.next 變化時 res才有變化