题目如下:
思路1:创建一个新的带头链表 (newhead),遍历头结点对应的值分别于x进行比较,将不等于x的节点尾插到新的带头链表中,返回新的带头链表的下一个节点。
代码如下:
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {ListNode* newhead, * newtail;newhead = newtail = (ListNode*)malloc(sizeof(ListNode));while (head){if (head->val != val){newtail->next = head;head = head->next;newtail = newtail->next;}else {head = head->next;}}newtail->next = NULL;return newhead->next;
}
思路2:与思路一类似,只不过是空链表,进行判断。
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {if (head == NULL){return NULL;}// 创建空链表ListNode* newhead, * newtail;newhead = newtail = NULL;while (head) {if (head->val != val) {// 空链表if (newhead == NULL) {newtail = newhead = head;}else {// 非空链表newtail->next = head;newtail = newtail->next;}}head = head->next;}if (newtail)newtail->next = NULL;return newhead;
}