LeetCode 143. 重排链表
题目描述
给定一个单链表 L 的头节点 head ,单链表 L 表示为:
L0 → L1 → … → Ln - 1 → Ln
请将其重新排列后变为:
L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
一、解题关键词
链表 交换 重排
二、解题报告
1.思路分析
转成成list 直接操作下标 进行数据合并
2.时间复杂度
3.代码示例
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public void reorderList(ListNode head) {
//遍历链表
if(head == null){return;}
List<ListNode> listResp = new ArrayList<ListNode>();
ListNode node = head;
while(node != null){
listResp.add(node);
node = node.next;
}
int i = 0,j = listResp.size() - 1;
while(i < j){
listResp.get(i).next = listResp.get(j);
i++;
if(i == j){
break;
}
listResp.get(j).next = listResp.get(i);
j--;
}
listResp.get(i).next = null;
}
}
2.知识点
总结
也可以使用双指针 直接操作 链表进行 链表合并