日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

linkedhashmap获取第n个元素_机试真题分享——交换链表前后第K个元素

發布時間:2023/12/2 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linkedhashmap获取第n个元素_机试真题分享——交换链表前后第K个元素 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

給定一個編碼鏈表和一個加密條件K,對編碼進行加密。
加密規則:把編碼從前往后開始數第K個元素和從后往前數第K個元素進行交換。
注意:編碼的長度為0.第一個編碼的序號是1.

示例:
輸入:

[1 2 3 4 5 6] 2

輸出:

[1 5 3 4 2 6]

鏈表節點定義如下:

public?class?ListNode?{
????int?val;
????ListNode?next;

????ListNode(int?x)?{
????????val?=?x;
????}
}

解題思路

1.萬能暴力法解決
2.先后指針法

參考代碼

package?com.lingluo;

import?java.util.ArrayList;
import?java.util.List;

/**
?*?@author?靈洛
?*?@date?2020/8/9?23:05
?*/
public?class?SwapLinkList?{
????/**
?????*?萬能暴力法(適用于在鏈表中插入/刪除節點、反向輸出鏈表、鏈表排序、翻轉鏈表、合并鏈表等)
?????*
?????*?使用數組/線性表/map緩存鏈表節點信息,按照提意處理后再轉回鏈表
?????*?@param?head
?????*?@param?k
?????*?@return
?????*/
????public?static?ListNode?swap(ListNode?head,?int?k)?{
????????ListNode?root?=?head;
????????List?list?=?new?ArrayList<>();while?(head?!=?null)?{
????????????list.add(head.val);
????????????head?=?head.next;
????????}//記錄交換節點的位置及取值int?leftIndex?=?k?-?1;int?rightIndex?=?list.size()?-?k;int?leftVal?=?list.get(leftIndex);int?rightVal?=?list.get(rightIndex);//?從第一個開始
????????ListNode?start?=?root;while?(start?!=?null)?{//找到正數第K個元素if?(leftIndex?==?0)?{
????????????????start.val?=?rightVal;
????????????}//找到倒數第K個元素if?(rightIndex?==?0)?{
????????????????start.val?=?leftVal;
????????????}
????????????start?=?start.next;
????????????leftIndex--;
????????????rightIndex--;
????????}return?root;
????}/**
?????*?先后指針法(用來尋找鏈表中第K個節點)
?????*?先發指針走K-1步,再讓后發指針從頭節點開始走
?????*?先發指針走到最后一個節點時,后發指針走到倒數第K個節點
?????*
?????*?@param?head
?????*?@param?k
?????*?@return
?????*/public?static?ListNode?swapByPointer(ListNode?head,?int?k)?{
????????ListNode?earlier?=?head;//?先發指針先走K-1步for?(int?i?=?0;?i?<=?k?-?1?;?i++)?{
????????????earlier?=?earlier.next;
????????}//?記錄一下第K個位置的節點,用于后面的交換
????????ListNode?mark1?=?earlier;
????????ListNode?later?=?head;//?先后指針一起走,先發指針走到最后一個節點時,后發指針走到倒數第K個節點while?(earlier?!=?null)?{
????????????earlier?=?earlier.next;
????????????later?=?later.next;
????????}//?交換兩個位置的值int?mark2?=?later.val;
????????later.val?=?mark1.val;
????????mark1.val?=?mark2;return?head;
????}//打印public?static?void?printLink(ListNode?head)?{
????????ListNode?curNode?=?head;while?(curNode?!=?null)?{
????????????System.out.print(curNode.val?+?"?");
????????????curNode?=?curNode.next;
????????}
????????System.out.println();
????}public?static?void?main(String[]?args)?{
????????ListNode?node1?=?new?ListNode(1);
????????ListNode?node2?=?new?ListNode(2);
????????ListNode?node3?=?new?ListNode(3);
????????ListNode?node4?=?new?ListNode(4);
????????ListNode?node5?=?new?ListNode(5);
????????node1.next?=?node2;
????????node2.next?=?node3;
????????node3.next?=?node4;
????????node4.next?=?node5;
????????printLink(node1);
????????swap(node1,?2);
????????printLink(node1);
????}
}

總結

以上是生活随笔為你收集整理的linkedhashmap获取第n个元素_机试真题分享——交换链表前后第K个元素的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。