From fc364dd739793af8ab87a6d83b72ad8700d6808b Mon Sep 17 00:00:00 2001 From: deeaitch Date: Wed, 17 Jun 2026 17:48:09 -0400 Subject: [PATCH] Ref: 2 step by step diagrams added. --- .../diagrams/00_initial_state.png | Bin 0 -> 23863 bytes .../diagrams/00_initial_state.puml | 35 +++++++++++ .../diagrams/01_save_next.png | Bin 0 -> 28398 bytes .../diagrams/01_save_next.puml | 38 ++++++++++++ .../diagrams/02_reverse_current_link.png | Bin 0 -> 25964 bytes .../diagrams/02_reverse_current_link.puml | 38 ++++++++++++ .../diagrams/03_move_pointers.png | Bin 0 -> 23122 bytes .../diagrams/03_move_pointers.puml | 39 ++++++++++++ .../diagrams/04_second_iteration.png | Bin 0 -> 25366 bytes .../diagrams/04_second_iteration.puml | 37 +++++++++++ .../diagrams/05_final_state.png | Bin 0 -> 23779 bytes .../diagrams/05_final_state.puml | 35 +++++++++++ .../04-reverse-linked-list/diagrams/README.md | 58 ++++++++++++++++++ 13 files changed, 280 insertions(+) create mode 100644 analysis/04-reverse-linked-list/diagrams/00_initial_state.png create mode 100644 analysis/04-reverse-linked-list/diagrams/00_initial_state.puml create mode 100644 analysis/04-reverse-linked-list/diagrams/01_save_next.png create mode 100644 analysis/04-reverse-linked-list/diagrams/01_save_next.puml create mode 100644 analysis/04-reverse-linked-list/diagrams/02_reverse_current_link.png create mode 100644 analysis/04-reverse-linked-list/diagrams/02_reverse_current_link.puml create mode 100644 analysis/04-reverse-linked-list/diagrams/03_move_pointers.png create mode 100644 analysis/04-reverse-linked-list/diagrams/03_move_pointers.puml create mode 100644 analysis/04-reverse-linked-list/diagrams/04_second_iteration.png create mode 100644 analysis/04-reverse-linked-list/diagrams/04_second_iteration.puml create mode 100644 analysis/04-reverse-linked-list/diagrams/05_final_state.png create mode 100644 analysis/04-reverse-linked-list/diagrams/05_final_state.puml create mode 100644 analysis/04-reverse-linked-list/diagrams/README.md diff --git a/analysis/04-reverse-linked-list/diagrams/00_initial_state.png b/analysis/04-reverse-linked-list/diagrams/00_initial_state.png new file mode 100644 index 0000000000000000000000000000000000000000..7299c75070e37e283565d377fe88e864fd64fa2b GIT binary patch literal 23863 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 LpM7iWc<=uJ>9+}& literal 0 HcmV?d00001 diff --git a/analysis/04-reverse-linked-list/diagrams/00_initial_state.puml b/analysis/04-reverse-linked-list/diagrams/00_initial_state.puml new file mode 100644 index 0000000..d0f47e5 --- /dev/null +++ b/analysis/04-reverse-linked-list/diagrams/00_initial_state.puml @@ -0,0 +1,35 @@ +@startuml +title Step 0 — Initial State + +object "Node 1" as n1 { + value = 1 +} + +object "Node 2" as n2 { + value = 2 +} + +object "Node 3" as n3 { + value = 3 +} + +n1 --> n2 : next +n2 --> n3 : next +n3 --> "null" : next + +object "previous" as prev +object "current" as cur + +prev --> "null" +cur --> n1 + +note bottom +Before the loop starts: + +previous = null +current = head + +The original list is still intact. +end note + +@enduml diff --git a/analysis/04-reverse-linked-list/diagrams/01_save_next.png b/analysis/04-reverse-linked-list/diagrams/01_save_next.png new file mode 100644 index 0000000000000000000000000000000000000000..fb2e0e2968cec63e33e8fff15c09ffbba4445b72 GIT binary patch literal 28398 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 V);UWIeoziaR!UwnU;Nd({{qELhsXc` literal 0 HcmV?d00001 diff --git a/analysis/04-reverse-linked-list/diagrams/01_save_next.puml b/analysis/04-reverse-linked-list/diagrams/01_save_next.puml new file mode 100644 index 0000000..54f9a2c --- /dev/null +++ b/analysis/04-reverse-linked-list/diagrams/01_save_next.puml @@ -0,0 +1,38 @@ +@startuml +title Step 1 — Save next + +object "Node 1" as n1 { + value = 1 +} + +object "Node 2" as n2 { + value = 2 +} + +object "Node 3" as n3 { + value = 3 +} + +n1 --> n2 : next +n2 --> n3 : next +n3 --> "null" : next + +object "previous" as prev +object "current" as cur +object "next" as nxt + +prev --> "null" +cur --> n1 +nxt --> n2 + +note right of nxt +next = current->next + +We save the next node before changing +current->next. + +Without this temporary pointer, the rest +of the original list would become unreachable. +end note + +@enduml diff --git a/analysis/04-reverse-linked-list/diagrams/02_reverse_current_link.png b/analysis/04-reverse-linked-list/diagrams/02_reverse_current_link.png new file mode 100644 index 0000000000000000000000000000000000000000..da1c69a2efde6563fa009ce95c9effc679537669 GIT binary patch literal 25964 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≫_vREz|{OU_O^k_F3&-V8q@<8VZVkd>Q_9P0+Z@2Pg=_UW!t%-k6KnDO#qS8)kqM;_We~{&cJ+{Nc1c@m;3U}{sdSflvP5?*0n+A>#RH!#;;)DOReG0dKSw;Ga?%xCN`z-ut*1yLT_5ZUE z&~$0OIy0*}q2x@n$wr}&6!rP%OtepBuxt7=W={Sj8CToSn9WZyXBP{_moX5(iuB&v zTeW4lO=xf>jwQX6*{=Xcw}m^`FQ+5U8uL)nh0=b_lqcGEPfpl$TkGGP-Q4m~)uhFZ zYej)B@ulK{Jtm$^W9!kiYP-86CpQo18!0y6%`@A%HG7Z;{oDTgfc|bEg)>jHxn&&pR$bh<24|;L_H-B?D=?cN) zYTJZ%F1r_t^3>+zv?~GQgkOC;i%|*tq;^64vs=6X*2Ym#FWgR&BXKMDdTyKG^27jz z!lHX5Auv`e(hcAK-(Fpzyqq4>=1_}QtF8N6?kp%+GM;_n)rgR zTvX#o#Si;hQfchX4-sS(SB0W)RK75ix2QHjW;|+@I>I1Hyr)v%+^;`%eL>BYw4%VYFlkUKd#q?NPOytverYtVYT2)oY*C$WFfwz+EnbDm8Q5#TLaV%kBSA(U*FAj%{ zL`z#2_!$vRs6W3xXT?&|v|jG6TuZtfE&i+amX~$9fiFX~uoDD?N4TA=CUQMu!Tg4M zAt7@>Yi94*tCb%IG*9JFqgIW|R{M3OqU?lM+kh zCI%75Y}j7F;{p{=)y(VU?J`_~D^dazolrbVDnDPn{K44wGvz-v*1IXbkNL6-vtHV4 z5pvY2W{1%)W%B<>`d|~;S~T2QVK!Pcj)^%&L}Vvty)_Qo+Y6_bG6A|NkW1MOAlGM` zu7v6}Wg-b6rl;EeB8-3c)))dO@+~GIf4filXlOtpX=g9~?Af#a{{G1&1L9$_*2w$e z{9tW$455by8^;5(`E;s|pZ4@p*Lq@$O$X-F#6|*xh)M8I#aDWl*6t_6A3jVT$m4Ug zs0ZrFMg!9I`n@tp&$a zhVnI(-p_4KPh~36Lg~KH@!9CjUY;*_yH+RAu|Gmy)l*H?{$*A>ili^J!XypvsZE(V z9J_Ppj=gwOQq30|dOdb@kq+Tl%&2Qpmy&Zc2}l47uv?b@DC?hWCstW+Fn`AKKZH4YmW zmzQfftJ_JITh(11yu%w$%_U3GJ`Zoa^a_eKP=*??t_|gqYihpeOD5T02+kkvei!Zl z)TTZOY$8ToQCk4XX=XvW|J^OpRS58JfS7o zixG@muZkMuHTcOq<5bD2pwxalV*_H&;-B78=HBd&X|7ZlE^&U@>elXIw}7EUcr+9B zLmOD8L?E2aqp-sg4I^tfO^kA12-eYS_yL*+R0fq!*mFyz#%+lS`x2!coeB7ibnAas z`|GEs&}(aI*sQdvDGdDCo?yrKyJxt|LPf&~rl!y!5Wqg$MTff#^1SUsZr(|8g{rxA zzuKCt{@Fr#-SEjjT^!Cv$l764MQYlc!10*S^=e?4VfAxT+birEJ0+YeNWKQz0otNxgWcSY4}Bl(

ayU!OXZ>3CC3jWT$ub02oY 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 E7XYZ8umAu6 literal 0 HcmV?d00001 diff --git a/analysis/04-reverse-linked-list/diagrams/02_reverse_current_link.puml b/analysis/04-reverse-linked-list/diagrams/02_reverse_current_link.puml new file mode 100644 index 0000000..114e8c4 --- /dev/null +++ b/analysis/04-reverse-linked-list/diagrams/02_reverse_current_link.puml @@ -0,0 +1,38 @@ +@startuml +title Step 2 — Reverse current->next + +object "Node 1" as n1 { + value = 1 +} + +object "Node 2" as n2 { + value = 2 +} + +object "Node 3" as n3 { + value = 3 +} + +n1 --> "null" : next +n2 --> n3 : next +n3 --> "null" : next + +object "previous" as prev +object "current" as cur +object "next" as nxt + +prev --> "null" +cur --> n1 +nxt --> n2 + +note right of n1 +current->next = previous + +Node 1 no longer points to Node 2. +It now points to the already reversed part. + +At the first iteration, the reversed part is empty, +so Node 1 points to null. +end note + +@enduml diff --git a/analysis/04-reverse-linked-list/diagrams/03_move_pointers.png b/analysis/04-reverse-linked-list/diagrams/03_move_pointers.png new file mode 100644 index 0000000000000000000000000000000000000000..160a26b1ae132a2e8c2990ca6f77a5ba631a17fe GIT binary patch literal 23122 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 DP3e}z literal 0 HcmV?d00001 diff --git a/analysis/04-reverse-linked-list/diagrams/03_move_pointers.puml b/analysis/04-reverse-linked-list/diagrams/03_move_pointers.puml new file mode 100644 index 0000000..01c2712 --- /dev/null +++ b/analysis/04-reverse-linked-list/diagrams/03_move_pointers.puml @@ -0,0 +1,39 @@ +@startuml +title Step 3 — Move previous and current + +object "Node 1" as n1 { + value = 1 +} + +object "Node 2" as n2 { + value = 2 +} + +object "Node 3" as n3 { + value = 3 +} + +n1 --> "null" : next +n2 --> n3 : next +n3 --> "null" : next + +object "previous" as prev +object "current" as cur + +prev --> n1 +cur --> n2 + +note right +previous = current +current = next + +The reversed part is now: + +1 -> null + +The remaining original part is still: + +2 -> 3 -> null +end note + +@enduml diff --git a/analysis/04-reverse-linked-list/diagrams/04_second_iteration.png b/analysis/04-reverse-linked-list/diagrams/04_second_iteration.png new file mode 100644 index 0000000000000000000000000000000000000000..7982692966f4969822ebd8784ebeec82ef02fd75 GIT binary patch literal 25366 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 n1 : next +n1 --> "null" : next +n3 --> "null" : next + +object "previous" as prev +object "current" as cur +object "next" as nxt + +prev --> n2 +cur --> n3 +nxt --> n3 + +note bottom +After processing Node 2: + +2 -> 1 -> null + +The reversed part grows from the front. +The remaining part starts at current. +end note + +@enduml diff --git a/analysis/04-reverse-linked-list/diagrams/05_final_state.png b/analysis/04-reverse-linked-list/diagrams/05_final_state.png new file mode 100644 index 0000000000000000000000000000000000000000..dfb465eec95a94c43cec1a9e52b90203368854cf GIT binary patch literal 23779 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 n2 : next +n2 --> n1 : next +n1 --> "null" : next + +object "head" as head +object "previous" as prev +object "current" as cur + +head --> n3 +prev --> n3 +cur --> "null" + +note right of head +When current becomes null, +previous points to the new head. + +head = previous +end note + +@enduml diff --git a/analysis/04-reverse-linked-list/diagrams/README.md b/analysis/04-reverse-linked-list/diagrams/README.md new file mode 100644 index 0000000..12a4e22 --- /dev/null +++ b/analysis/04-reverse-linked-list/diagrams/README.md @@ -0,0 +1,58 @@ +# Reverse Linked List — PlantUML Diagrams + +This directory contains PlantUML diagrams for the three-pointer linked list reversal algorithm. + +The diagrams use a small list: + +```text +1 -> 2 -> 3 -> null +``` + +and show how it becomes: + +```text +3 -> 2 -> 1 -> null +``` + +## Files + +- `00_initial_state.puml` — initial state before the loop +- `01_save_next.puml` — saving `next = current->next` +- `02_reverse_current_link.puml` — reversing `current->next` +- `03_move_pointers.puml` — moving `previous` and `current` +- `04_second_iteration.puml` — state after the second node is processed +- `05_final_state.puml` — final state after the loop + +## Generate PNG Files + +```sh +plantuml diagrams/*.puml +``` + +## Generate SVG Files + +```sh +plantuml -tsvg diagrams/*.puml +``` + +## Core Idea + +During the loop, the list is logically split into two parts: + +- `previous` points to the already reversed part +- `current` points to the node currently being processed +- `next` temporarily preserves access to the remaining original list + +The key operation is: + +```cpp +current->next = previous; +``` + +But this is only safe after saving: + +```cpp +Node* next = current->next; +``` + +Otherwise the remaining part of the original list would be lost.