十五 連結串列與遞迴,leetCode203題
阿新 • • 發佈:2018-11-20
兩種方式:
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) returnnull; //考慮非頭結點,遍歷連結串列,如果找到,刪除 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; } } }