做关于链表类的题目,经常提示 空指针 ,导致每次写程序,都会写if()去判断
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if((head == NULL)) return NULL;
int list_length = 0;
ListNode *temp_head = head;
while(temp_head != NULL){
list_length++;
temp_head = temp_head->next;
}
if(n == 0) return head;//没有删除元素
if(n == list_length){// 删除头元素,如果元素只有一个,返回的是空链表。如果元素大于1,那么删除头节点
temp_head = head;
if(temp_head->next != NULL){
temp_head = temp_head->next;
return temp_head;
}else{
return NULL;
}
}
temp_head = head;
n = n%list_length;
for(int i = 1;i<list_length-n;i++)
temp_head = temp_head->next;
if(n == 1){
if(temp_head != NULL)
{
temp_head->next = NULL;
}
}else if(n>1){
if((temp_head->next != NULL)&&(temp_head->next->next != NULL))
temp_head->next = temp_head->next->next;
}
return head;
}
};