日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/2 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linkedhashmap获取第n个元素_机试真题分享——交换链表前后第K个元素 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

給定一個(gè)編碼鏈表和一個(gè)加密條件K,對(duì)編碼進(jìn)行加密。
加密規(guī)則:把編碼從前往后開(kāi)始數(shù)第K個(gè)元素和從后往前數(shù)第K個(gè)元素進(jìn)行交換。
注意:編碼的長(zhǎng)度為0.第一個(gè)編碼的序號(hào)是1.

示例:
輸入:

[1 2 3 4 5 6] 2

輸出:

[1 5 3 4 2 6]

鏈表節(jié)點(diǎn)定義如下:

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

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

解題思路

1.萬(wàn)能暴力法解決
2.先后指針?lè)?/p>

參考代碼

package?com.lingluo;

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

/**
?*?@author?靈洛
?*?@date?2020/8/9?23:05
?*/
public?class?SwapLinkList?{
????/**
?????*?萬(wàn)能暴力法(適用于在鏈表中插入/刪除節(jié)點(diǎn)、反向輸出鏈表、鏈表排序、翻轉(zhuǎn)鏈表、合并鏈表等)
?????*
?????*?使用數(shù)組/線性表/map緩存鏈表節(jié)點(diǎn)信息,按照提意處理后再轉(zhuǎn)回鏈表
?????*?@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;
????????}//記錄交換節(jié)點(diǎn)的位置及取值int?leftIndex?=?k?-?1;int?rightIndex?=?list.size()?-?k;int?leftVal?=?list.get(leftIndex);int?rightVal?=?list.get(rightIndex);//?從第一個(gè)開(kāi)始
????????ListNode?start?=?root;while?(start?!=?null)?{//找到正數(shù)第K個(gè)元素if?(leftIndex?==?0)?{
????????????????start.val?=?rightVal;
????????????}//找到倒數(shù)第K個(gè)元素if?(rightIndex?==?0)?{
????????????????start.val?=?leftVal;
????????????}
????????????start?=?start.next;
????????????leftIndex--;
????????????rightIndex--;
????????}return?root;
????}/**
?????*?先后指針?lè)?用來(lái)尋找鏈表中第K個(gè)節(jié)點(diǎn))
?????*?先發(fā)指針走K-1步,再讓后發(fā)指針從頭節(jié)點(diǎn)開(kāi)始走
?????*?先發(fā)指針走到最后一個(gè)節(jié)點(diǎn)時(shí),后發(fā)指針走到倒數(shù)第K個(gè)節(jié)點(diǎn)
?????*
?????*?@param?head
?????*?@param?k
?????*?@return
?????*/public?static?ListNode?swapByPointer(ListNode?head,?int?k)?{
????????ListNode?earlier?=?head;//?先發(fā)指針先走K-1步for?(int?i?=?0;?i?<=?k?-?1?;?i++)?{
????????????earlier?=?earlier.next;
????????}//?記錄一下第K個(gè)位置的節(jié)點(diǎn),用于后面的交換
????????ListNode?mark1?=?earlier;
????????ListNode?later?=?head;//?先后指針一起走,先發(fā)指針走到最后一個(gè)節(jié)點(diǎn)時(shí),后發(fā)指針走到倒數(shù)第K個(gè)節(jié)點(diǎn)while?(earlier?!=?null)?{
????????????earlier?=?earlier.next;
????????????later?=?later.next;
????????}//?交換兩個(gè)位置的值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);
????}
}

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。