题解 | #链表的奇偶重排#
链表的奇偶重排
https://www.nowcoder.com/practice/02bf49ea45cd486daa031614f9bd6fc3
这道题的思路就是将链表节点存放到两个集合中。奇节点存放集合1中,偶节点存放到集合2中。
之后就简单了,创建一个虚拟头节点,然后遍历集合,将链表连起来返回即可。
#哈啰出行招聘##字节测试开发一面面经#
//存放奇节点
List<ListNode> listNodeList1 = new ArrayList<>();
//存放偶节点
List<ListNode> listNodesList2 = new ArrayList<>();
int i = 1;
while (head != null) {
if (i % 2 != 0) {
listNodeList1.add(head);
} else {
listNodesList2.add(head);
}
head = head.next;
i++;
}
之后就简单了,创建一个虚拟头节点,然后遍历集合,将链表连起来返回即可。
ListNode res=new ListNode(-1);
ListNode result=res;
for (ListNode listNode : listNodeList1) {
res.next=listNode;
res=res.next;
}
for (ListNode listNode : listNodesList2) {
res.next=listNode;
res=res.next;
}
res.next=null;
return result.next;
}
总体代码如下:
/*
给定链表,奇节点放在一起,偶节点放在一起,然后输出
思路:将奇节点,偶节点分别放在两个集合中,然后重新连接
*/
public ListNode oddEvenList(ListNode head) {
//存放奇节点
List<ListNode> listNodeList1 = new ArrayList<>();
//存放偶节点
List<ListNode> listNodesList2 = new ArrayList<>();
int i = 1;
while (head != null) {
if (i % 2 != 0) {
listNodeList1.add(head);
} else {
listNodesList2.add(head);
}
head = head.next;
i++;
}
ListNode res=new ListNode(-1);
ListNode result=res;
for (ListNode listNode : listNodeList1) {
res.next=listNode;
res=res.next;
}
for (ListNode listNode : listNodesList2) {
res.next=listNode;
res=res.next;
}
res.next=null;
return result.next;
}
#哈啰出行招聘##字节测试开发一面面经#
查看28道真题和解析