這道題目有兩種算法,但無論哪種算法,都要考慮單鏈表少于4個元素的情況: 第1種算法,建立兩個指針,第一個先走4步,然后第2個指針也開始走,兩個指針步伐(前進速度)一致。
static Link GetLast4thOne(Link head){Link first = head;Link second = head;for (int i = 0; i < 4; i++){if (first.Next == null)throw new Exception(“Less than 4 elements”);first = first.Next;}while (first != null){first = first.Next;second = second.Next;}return second;}第2種算法,做一個數組arr[4],讓我們遍歷單鏈表,把第0個、第4個、第8個……第4N個扔到arr[0],把第1個、第5個、第9個……第4N+1個扔到arr[1],把第2個、第6個、第10個……第4N+2個扔到arr[2],把第3個、第7個、第11個……第4N+3個扔到arr[3],這樣隨著單鏈表的遍歷結束,arr中存儲的就是單鏈表的最后4個元素,找到最后一個元素對應的arr[i],讓k=(i+1)%4,則arr[k]就是倒數第4個元素。
static Link GetLast4thOneByArray(Link head){Link curr = head;int i = 0;Link[] arr = new Link[4];while (curr.Next != null){arr[i] = curr.Next;curr = curr.Next;i = (i + 1) % 4;}if (arr[i] == null)throw new Exception(“Less than 4 elements”);return arr[i];}新聞熱點
疑難解答