c# - 成对交换链表
问题描述
public ListNode SwapPairs(ListNode head) {
if(head == null || head.next == null) {
return head;
}
var newHead = head.next;
ListNode a = head;
ListNode b = head.next;
ListNode prev = null;
while(a != null && b != null) {
a.next = b.next;
b.next = a;
if(prev != null)
prev.next = b;
if(a.next == null)
break;
b = a.next.next;
prev = a;
a = a.next;
}
return newHead;
}
此代码来自 leetcode,此代码有效,但我不明白的是在此代码中使用 prev 变量,我们没有将 prev 的任何值分配给 a 或 b,但如果没有代码,我不确定不管这是一个愚蠢的问题,还是我没有注意任何重要的事情。谢谢
解决方案
prev
不需要分配给任何变量。我们使用它来跟踪a
和更新引用的next
属性。它用于确保先前的交换链正确地与当前的交换链相连。
例如,在第二次迭代中,我们希望确保1.next
指向4
而不是3
像在第一次迭代中那样。这可以通过跟踪对当前对的前一个元素的引用prev
并通过引用进行更新prev.next
来完成。
Original:
1 -> 2 -> 3 -> 4 -> NULL
1st Iteration:
2 -> 1 -> 3 -> 4 -> NULL
2nd Iteration:
2 -> 1 [->] 4 -> 3 -> NULL
推荐阅读
- elasticsearch - Elasticsearch 的 NEST API 不返回查询结果,而通过 POSTMAN 提交相同的查询成功
- css - Ag-Grid:修改单个列标题的 css/样式?
- node.js - 阅读谷歌日历活动
- c - 打印文本文件的最后几行
- asp.net-core - System.InvalidOperationException:在配置时尝试使用上下文
- node.js - POST 请求重定向到 Nginx 代理和 NodeJS 中的 GET
- android - Android:React-native-share 在尝试 Share.open 时返回“错误:系统失败”
- sql - 如果仅在特定日期之后存在,如何选择行?
- react-native - React Native Router Flux 和 React Native Meteor 初始场景渲染问题
- php - 看不到“+”号,将数据从 AJAX 传递到 PHP