1.K 个一组翻转链表
- a.next = reverseKGroup(b,k);
- if(b==null) return head
- while(cur!=b)
/**
* 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 ListNode reverseKGroup(ListNode head, int k) {
if(head == null) return null;
ListNode b,a;
a= b = head;
for(int i=0; i<k; i++){
if(b==null) return head;
b=b.next;
}
ListNode newHead = reverse(a,b);
a.next = reverseKGroup(b,k);
return newHead;
}
public ListNode reverse(ListNode a, ListNode b){
ListNode pre,cur;
pre=null;
cur=a;
while(cur!=b){
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
}
2. 回文链表
if(fast!=null) slow=slow.next
while(right!=null)
/**
* 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 boolean isPalindrome(ListNode head) {
ListNode slow ,fast;
slow = fast = head;
while(fast!=null && fast.next !=null){
slow = slow.next;
fast = fast.next.next;
}
if(fast!=null) slow=slow.next;
ListNode right = reverse(slow);
ListNode left = head;
while(right!=null){
if(left.val!=right.val){
return false;
}
left=left.next;
right=right.next;
}
return true;
}
public ListNode reverse(ListNode head){
ListNode pre = null;
ListNode cur = head;
while(cur!=null){
ListNode next = cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
return pre;
}
}