c语言练习88::移除链表元素

移除链表元素

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

c语言练习88::移除链表元素_第1张图片

c语言练习88::移除链表元素_第2张图片 

 代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {
  ListNode *newHead,*newTail;
	newHead = newTail = NULL;
	ListNode* pcur = head;
	while (pcur) {
		if (pcur->val != val) {
//把当前结点插入到新链表中
			//链表为空,插进来的结点就是链表的头结点和尾结点
			//链表不为空,直接尾插,让新插进来的结点成为链表新的尾结点
			if (newHead == NULL) {
				newHead = newTail = pcur;
			}
			else {
				newTail->next = pcur;
				newTail = newTail->next;
			}
		}
		pcur = pcur->next;
	}
	if (newTail) {
		newTail->next = NULL;
	}
	return newHead;
}

你可能感兴趣的:(c语言,链表,算法)