203移除链表元素
class Solution {
public int removeElement(int[] nums, int val) {
int slowptr=0;
for(int fastptr=0;fastptr<nums.length;fastptr++)
if(nums[fastptr]!=val){
nums[slowptr++]=nums[fastptr];
}
return slowptr ;
}
}
707设计链表元素
class ListNode{
int val;
ListNode next;
ListNode(){}
ListNode(int val){
this.val=val;
}
}
class MyLinkedList {
int size;//元素个数
ListNode dummyhead;
public MyLinkedList() {
size=0;//链表元素个数
dummyhead=new ListNode(0);//虚拟头结点
}
public int get(int index) {
if(index<0||index>=size)
return -1;
ListNode cur=dummyhead.next;
while(index-->0)
{
cur=cur.next;
}
return cur.val ;
}
public void addAtHead(int val) {
addAtIndex(0,val);
}
public void addAtTail(int val) {
addAtIndex(size,val);
}
public void addAtIndex(int index, int val) {
if(index> size)
return ;
if(index<0){
index=0;
}
size++;
ListNode cur=dummyhead;
while(index-->0){
cur=cur.next;
}
ListNode newNode=new ListNode(val);
newNode.next=cur.next;
cur.next=newNode;
}
public void deleteAtIndex(int index) {
if(index>=0&&index<size){
size--;
ListNode cur=dummyhead;
while(index-->0 ){
cur=cur.next;
}
cur.next=cur.next.next;
}
}
}
/**
* Your MyLinkedList object will be instantiated and called as such:
* MyLinkedList obj = new MyLinkedList();
* int param_1 = obj.get(index);
* obj.addAtHead(val);
* obj.addAtTail(val);
* obj.addAtIndex(index,val);
* obj.deleteAtIndex(index);
*/
206 反转链表
/**
* 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 pre= null;
ListNode cur= head;
while(cur!=null){
ListNode temp=null ;
temp=cur.next;//保存cur.next这条指针
cur.next=pre;//反转指针,让head指向null
pre=cur;
cur=temp;//pre与cur指针都向右移动
}
return pre ;
}
}
笔记
心得
设计链表中要注意cur的意义
反转链表思想再加强一下