反转链表:

地址: https://leetcode.cn/problems/reverse-linked-list/description/?envType=study-plan-v2&envId=top-100-liked

第一种解法 :

代码:

/**
 * 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 reverseList(ListNode head) {
          ListNode  pree = null;	// 存储的上一个节点
	      ListNode curread = head;  // 当前操作起始节点
	      while(curread !=null) {
	    	  ListNode nextNode  = curread.next; // 存储下一个节点
	    	  curread.next = pree; // 反转,指向上一个节点
	    	  pree = curread;    // 前移动,下一个节点指向的位置
	    	  curread = nextNode; // 前移,下一个操作的节点
	      }
		  return pree;
    }
}

核心: 记住当前得节点是什么? 上一个节点又是什么? 下一个节点是什么? 然后遍历即可

第二种解法:

头插法:

 // 头插法
    public ListNode reverseList(ListNode head) {
            // 处理空链表的情况
           if (head == null) {
                return null;
           }
           ListNode  pree  = new ListNode(-1);
	       pree.next = head;
	       ListNode  curred = head;
	       while(curred.next !=null) {
	    	ListNode next = curred.next; // 存储下一个节点
	    	curred.next = next.next; // 当前节点连接下一个节点
	    	next.next = pree.next; // 下一个节点关联头节点
	    	pree.next = next; // 更新当前的头节点
	         
	       }		   
		   return pree.next;
    }

异曲同工之妙:

同理:

反转字符串:

地址: https://leetcode.cn/problems/reverse-string/description/

代码:

   public void reverseString(char[] s) {
           	for(int i = 0 , j = s.length-1; i <=j ; i++,j--) {
		   		char tep = s[i];
		   		s[i] = s[j];
		   		s[j] = tep;
		   	}
    }

 同理: 第二套一致:
class Solution {
    public void reverseString(char[] s) {
         
		   	int left = 0 , right = s.length-1;
		   	while(left  < right) {
		   		char tep =  s[left];
		   		s[left] = s[right];
		   		s[right] = tep;
		   		left++;
		   		right--;
		   	}
    }
}

反转字符串二

地址: https://leetcode.cn/problems/reverse-string-ii/description/

代码:

class Solution {
    public String reverseStr(String s, int k) {
        char[] arr = s.toCharArray();
        for (int i = 0; i < arr.length; i += 2 * k) {
            int left = i;
            int right = Math.min(i + k - 1, arr.length - 1); // 确定前k个字符的右边界
            reverse(arr, left, right);
        }
        return new String(arr);
    }
    
    private void reverse(char[] arr, int left, int right) {
        while (left < right) {
            char temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
    }
}

下篇见把 !!!