微博seo營銷搜索引擎優(yōu)化的簡稱
1、算法思路
講一下設置虛擬頭節(jié)點的那個方法,設置一個新節(jié)點指向原來鏈表的頭節(jié)點,這樣我們就可以通過判斷鏈表的當前節(jié)點的后繼節(jié)點值是不是目標刪除值,來判斷是否刪除這個后繼節(jié)點了。如果不設置虛擬頭節(jié)點,則需要將頭節(jié)點和后面的節(jié)點分開來討論,代碼會復雜一點。
2、Java代碼實現(xiàn)
package listnodes;//Definition for singly-linked list.
class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) { this.val = val; }ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}public class RemoveElements {public static void main(String[] args) {//構造鏈表
// int[] nums = new int[]{1,2,6,3,4,5,6};
// int[] nums = new int[]{7,7,7,7};int[] nums = new int[]{1,2,2,1};ListNode head = null;for (int i = nums.length - 1; i >= 0; i--) {ListNode node = new ListNode(nums[i]);if(head != null){node.next = head;}head = node;}//處理鏈表Solution sol = new Solution();
// ListNode resNode = sol.removeElements(head, 6);//[1,2,3,4,5]
// ListNode resNode = sol.removeElements(head, 7);//[]ListNode resNode = sol.removeElements(head, 2);//[1, 1]//遍歷鏈表并打印StringBuilder sb = new StringBuilder("[");while(resNode != null){if(sb.length() != 1) sb.append(", ");sb.append(resNode.val);resNode = resNode.next;}sb.append("]");System.out.println(sb);}
}// 遞歸法
//class Solution {
// public ListNode removeElements(ListNode head, int val) {
// if (head == null) {
// return head;
// }
// head.next = removeElements(head.next, val);
// return head.val == val ? head.next : head;
// }
//}// 頭結點是否刪除最后再考慮
//class Solution {
// public ListNode removeElements(ListNode head, int val) {
// ListNode pre = head;
// while(pre != null && pre.next != null){
// if(pre.next.val == val){
// //跳過當前節(jié)點的后一個節(jié)點賦值給當前節(jié)點的前一個節(jié)點的next,相當于刪除當前節(jié)點
// pre.next = pre.next.next;
// }else{
// pre = pre.next;
// }
// }
// pre = head;
// while(pre != null && pre.val == val){
// pre = pre.next;
// }
// return pre;
// }
//}// 設置一個虛擬頭結點,這樣代碼更簡單
class Solution {public ListNode removeElements(ListNode head, int val) {ListNode temp = new ListNode(0);temp.next = head;ListNode pre = temp;while(pre.next != null){if(pre.next.val == val){//跳過當前節(jié)點的后一個節(jié)點賦值給當前節(jié)點的前一個節(jié)點的next,相當于刪除當前節(jié)點pre.next = pre.next.next;}else{pre = pre.next;}}return temp.next;}
}
3、完整題目
203. 移除鏈表元素
給你一個鏈表的頭節(jié)點?head
?和一個整數(shù)?val
?,請你刪除鏈表中所有滿足?Node.val == val
?的節(jié)點,并返回?新的頭節(jié)點?。
示例 1:
輸入:head = [1,2,6,3,4,5,6], val = 6 輸出:[1,2,3,4,5]
示例 2:
輸入:head = [], val = 1 輸出:[]
示例 3:
輸入:head = [7,7,7,7], val = 7 輸出:[]
提示:
- 列表中的節(jié)點數(shù)目在范圍?
[0, 10^4]
?內(nèi) 1 <= Node.val <= 50
0 <= val <= 50