1. 程式人生 > >十五 連結串列與遞迴,leetCode203題

十五 連結串列與遞迴,leetCode203題

兩種方式:

package com.lt.datastructure.LinkedList;
/**
 * leetCode 203題
 * /**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 * 第一種:不使用虛擬頭結點
 * 首先考慮頭結點,頭結點為空,返回null,如果頭結點不為空,其值為val,刪除頭結點。
 * 然後考慮非頭結點,遍歷連結串列,如果找到,刪除
 
*/ class Solution { public ListNode removeElements(ListNode head, int val) { //如果頭結點不為空,其值為val,刪除頭結點 while(head != null && head.val == val){ ListNode delNode = head; head = head.next; delNode.next = null; } if(head==null) return
null; //考慮非頭結點,遍歷連結串列,如果找到,刪除 ListNode prev = head; while(prev.next!=null){ if(prev.next.val==val){ ListNode delNode = prev.next; prev.next = delNode.next; delNode.next = null; }else{ prev
= prev.next; } } return head; } /** * 第二種:使用虛擬頭結點 */ class Solution2 { public ListNode removeElements(ListNode head, int val) { //使用虛擬頭結點簡化第一種方式的程式碼 ListNode dummyhead = new ListNode(-1); //指向head頭結點 dummyhead.next = head; ListNode prev = dummyhead; while(prev.next!=null){ if(prev.next.val == val){ prev.next = prev.next.next; }else{ prev = prev.next; } } //對呼叫演算法的人遮蔽,返回dummyhead.next而不是dummyhead return dummyhead.next; } } }