Java实现奇偶链表
***请注意:***奇数节点和偶数节点指的是节点的编号的奇偶性,而不是节点的值得奇偶性
示例
输入:1>2>3>4>5>null
输出:1>3>5>2>4>null
代码:
public class OddEvenList {
public static void main(String[] args) {
Head head = new Head();
head.setVal("1").setVal("2").setVal("3").setVal("4").setVal("5");
ListHead listHead = new ListHead(head);
listHead.oddEvenList(listHead);
listHead.output();
}
}
class Head{
public String val;
public Head next;
public String getVal() {
return val;
}
public Head setVal(String val) {
this.val = val;
this.next = new Head();
return this.next;
}
public Head getNext() {
return next;
}
public void setNext(Head next) {
this.next = next;
}
}
class ListHead{
private Head head;
public ListHead(Head head) {
this.head = head;
}
public Head getHead() {
return head;
}
public ListHead setHead(Head head) {
this.head = head;
return this;
}
public ListHead oddEvenList(ListHead listHead) {
Head head = listHead.getHead();
if (head == null || head.next == null) {
return listHead.setHead(head);
}
//保存头节点
Head dummyHead = head;
Head node = head.next;
//保存第一个偶数节点
Head nextNode = head.next;
while (node != null && node.next != null) {
//依次将奇数节点链接起来
head.next = head.next.next;
head = head.next;
//依次将偶数节点链接起来
node.next = node.next.next;
node = node.next;
}
//将第一个偶数节点链接到最后一个奇数节点的后面
head.next = nextNode;
return listHead.setHead(dummyHead);
}
public void output(){
while (head!=null){
System.out.println(head.getVal());
head = head.next;
}
}
}
交换逻辑手动示意图
打印输出
标准答案