11.删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
解法:首先考虑特殊情况,如果头结点为要删除的值就直接返回头结点下一个节点。否则创建两个指针,pre和cur,pre代表当前节点的上一个节点,cur代表当前节点。之后运用循环找到该节点,删除该节点
pre.next = cur.next
最后返回头结点
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteNode(ListNode head, int val) {
if(head.val==val)
return head.next;
ListNode pre=head,cur=head.next;
while(cur!=null&&cur.val!=val){
pre = cur;
cur = cur.next;
}
if(cur!=null){
pre.next = cur.next;
}
return head;
}
}
12.调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
解法:准备两个指针left和right,left在最左边,right在最右边,left从左往右找到偶数停下,right从右往左找到奇数停下,之后进行交换,循环此过程最后输出数组。
class Solution {
public int[] exchange(int[] nums) {
int left=0,right=nums.length-1,temp;
while(left<right){
while(left<right&&nums[left]%2==1){
left++;
}
while(left<right&&nums[right]%2==0){
right--;
}
temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
return nums;
}