/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
Reverse Linked List
Reverse single linked list
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null) {
return head;
}
ListNode pre = head;
ListNode cur = head.next;
ListNode next1 = null;
while(cur != null) {
next1 = cur.next;//空指针存放cur.next
cur.next = pre;
pre = cur;
cur = next1; //指针移动
}
head.next = null;
head = pre; //切不可省略
return head;
}
}
328. Odd Even Linked List
给定一个单链表,将里面所有奇节点和偶节点分别取出来组成独立的单链表,再将偶节点的单链表放到奇链表的后面。
/*思想:遍历单链表,将奇偶位置的节点分别拿出来。注:偶节点的头结点需要另外标明,以便于接入奇链表的后面。
核心:偶节点的下一个一定的奇结点
之所以用偶节点而不用奇节点,目的是,如果奇节点为空,偶节点可以为空也可以不为空(不方便下一次循环或者说是不方便
奇链表最后一个节点的表达)。采用偶节点,就可以避免奇链表最后一个节点的确定(无论偶节点是否为空,都不会影响到奇
链表最后一个节点的表达)、
*/
class Solution {
public ListNode oddEvenList(ListNode head) {
if (head != null) {
ListNode odd = head, even = head.next, evenHead = even;
while (even != null && even.next != null) {
//判断偶节点以及下一个奇节点是否为空
odd.next = odd.next.next;//奇节点下一个是奇节点下一个下一个
even.next = even.next.next; //偶节点下一个是偶节点下一个下一个
//奇偶节点指向该链表的最后一个节点,同时,也是原始链表奇偶节点遍历的当前位置
odd = odd.next;//更新奇偶链表的下一个位置
even = even.next;
}
odd.next = evenHead;
}
return head;
}
}