linkedhashmap获取第n个元素_机试真题分享——交换链表前后第K个元素
生活随笔
收集整理的這篇文章主要介紹了
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)題。
- 上一篇: 为什么将 iPhone 通过数据线连接到
- 下一篇: 如何快速弄懂一个新模型_如何评估创业项目