連結串列中的節點每k個一組翻轉
連結串列中的節點每k個一組翻轉
題目描述
將給出的連結串列中的節點每 k\ k k 個一組翻轉,返回翻轉後的連結串列
如果連結串列中的節點數不是 k\ k k 的倍數,將最後剩下的節點保持原樣
你不能更改節點中的值,只能更改節點本身。
要求空間複雜度 O(1)
例如:
給定的連結串列是1→2→3→4→5
對於 k=2, 你應該返回 2→1→4→3→5
對於 k=3, 你應該返回 3→2→1→4→5
程式碼
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode類
* @param k int整型
* @return ListNode類
*/
public ListNode reverseKGroup (ListNode head, int k) {
// write code here
if(head == null||head.next == null||k == 1) return head;//笨死了我,居然寫成 head.next != null,找了下面程式半天錯誤,哭
//上一鏈條最後一個節點
ListNode pre_tail = null;
//當前鏈的頭節點
ListNode cur_head = head;
//當點鏈的尾結點
ListNode cur_tail = head;
int count = k-1;
while(cur_tail!=null){
//獲取當前鏈的尾結點
if( count!=0 ){
cur_tail = cur_tail.next;
count--;
}
if(count == 0 && cur_tail!=null){
//反轉當前連結串列
reverseK(cur_head, cur_tail);
//連線當前鏈和上一條鏈
if(pre_tail==null){
head = cur_tail;
}else{
pre_tail.next = cur_tail;
}
//下一輪轉換
pre_tail = cur_head;
cur_head = pre_tail.next;
cur_tail = cur_head;
count = k-1;
}
//count不為零且cur_tail=null,直接退出,k餘數後的節點不做操作
}
return head;
}
public void reverseK(ListNode cur_head, ListNode cur_tail){
//為了獲取下一鏈條的開始節點
ListNode head_next = cur_head;
//前後節點
ListNode p1 = cur_head;
ListNode p2 = cur_head.next;
//
ListNode next_head = cur_tail.next;
while( p2!=next_head && p2!=null ){
head_next.next = p2.next;
p2.next = p1;
p1 = p2;
//下一輪
p2 = head_next.next;
}
}
}
相關文章
- K個節點翻轉連結串列
- [leetcode 25]. K 個一組翻轉連結串列LeetCode
- 牛客網高頻演算法題系列-BM3-連結串列中的節點每k個一組翻轉演算法
- LeetCode 25. k個一組翻轉連結串列LeetCode
- 定義一個函式,輸入一個連結串列的頭節點,反轉該連結串列並輸出反轉後連結串列的頭節點函式
- [連結串列]leetcode1019-連結串列中的下一個更大節點LeetCode
- 【連結串列問題】打卡2:刪除單連結串列的第 K個節點
- 【劍指offer】【3】輸入一個連結串列,從尾到頭列印連結串列每個節點的值。
- 1019. 連結串列中的下一個更大節點
- 一個node連結串列翻轉的面試題面試題
- 兩個連結串列的第一個公共節點
- [每日一題] 第十三題:連結串列中倒數第k個節點每日一題
- 連結串列倒數第k個結點
- 【連結串列問題】刪除單連結串列的中間節點
- 2024/11/27 【連結串列】LeetCode 24 兩兩交換連結串列中的節點 & LeetCode 19 刪除連結串列的倒數第N個節點LeetCode
- 力扣 - 劍指 Offer 22. 連結串列中倒數第k個節點力扣
- 劍指offer——連結串列中倒數第k個結點
- 利用遞迴方法實現連結串列反轉、前N個節點反轉以及中間部分節點反轉遞迴
- leetcode----刪除連結串列中的節點LeetCode
- 【連結串列問題】打卡3:刪除單連結串列的中間節點
- [連結串列】2.輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。[多益,位元組考過]
- 翻轉連結串列常用寫法
- **24. 兩兩交換連結串列中的節點****19.刪除連結串列的倒數第N個節點****面試題 02.07. 連結串列相交****142.環形連結串列II**面試題
- Day4(連結串列)|24. 兩兩交換連結串列中的節點 & 19.刪除連結串列的倒數第N個節點 & 面試題 02.07. 連結串列相交 &142.環形連結串列II面試題
- 特定深度節點連結串列
- LeetCode題解(Offer22):尋找連結串列中倒數第k個節點(Python)LeetCodePython
- 反轉一個單連結串列。
- 兩個連結串列的第一個公共結點
- LeetCode每日一題:刪除連結串列中的節點(No.237)LeetCode每日一題
- Day 4 | 24. 兩兩交換連結串列中的節點 、 19.刪除連結串列的倒數第N個節點 、面試題 02.07. 連結串列相交 、142.環形連結串列II面試題
- 劍指Offer-38-兩個連結串列的第一個公共節點
- 【LeetCode】【連結串列】劍指 Offer 52. 兩個連結串列的第一個公共節點 思路解析和程式碼LeetCode
- LCR 140. 訓練計劃 II 連結串列倒數第k個節點
- 圖解帶頭節點的單連結串列的反轉操作圖解
- 第四天:● 24. 兩兩交換連結串列中的節點 ● 19.刪除連結串列的倒數第N個節點 ● 面試題 02.07. 連結串列相交 ● 142.環形連結串列II面試題
- leetcode 24 兩兩交換連結串列中的節點LeetCode
- Redis筆記 — 連結串列和連結串列節點的API函式(三)Redis筆記API函式
- 166. 連結串列倒數第n個節點