每日算法(三)

每日算法(三)

引言:这次是链表的题

1.创建一个链表

public class ListNode {
    // 结点的值
    int val;

    // 下一个结点
    ListNode next;

    // 节点的构造函数(无参)
    public ListNode() {
    }

    // 节点的构造函数(有一个参数)
    public ListNode(int val) {
        this.val = val;
    }

    // 节点的构造函数(有两个参数)
    public ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}


203.移除链表元素

题意:删除链表中等于给定值 val 的所有节点。

示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]

示例 2: 输入:head = [], val = 1 输出:[]

示例 3: 输入:head = [7,7,7,7], val = 7 输出:[]


class Solution {
    public ListNode removeElements(ListNode head, int val) {
       while(head != null && head.val == val){
          head = head.next;
       }
       ListNode cur = head;
       while (cur != null && cur.next != null){
          if(cur.next.val == val){
             cur.next = cur.next.next;
          }else{
             cur = cur.next;
          }
       }
       return head;
    }
}
 class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 }

206.反转链表

题意:反转一个单链表。

示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL

public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode cur = head;
    ListNode temp = null;
    while (cur!=null){
       temp = cur.next;
       cur.next = prev;
       prev = temp;
    }
    return prev;
}

24. 两两交换链表中的节点给定一个链表,两两交换其中

相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

class Solution {
  public ListNode swapPairs(ListNode head) {
        ListNode dumyhead = new ListNode(-1); 
        dumyhead.next = head;
        ListNode cur = dumyhead;
        ListNode temp; 
        ListNode firstnode; 
        ListNode secondnode;
        while (cur.next != null && cur.next.next != null) {
            temp = cur.next.next.next;
            firstnode = cur.next;
            secondnode = cur.next.next;
            cur.next = secondnode;      
            secondnode.next = firstnode; 
            firstnode.next = temp;    
            cur = firstnode; 
        }
        return dumyhead.next;  
    }
}

LICENSED UNDER CC BY-NC-SA 4.0