算法思路:创建两个新链表 phead 和 ptail ,分别指向为空,再创建一个新链表,指向原链表的头节点,再用该链表去遍历原链表,当原链表指向的 val 值不为空时,继续遍历......直到遍历完所有结点。
代码如下:
typedef struct ListNode ListNode; struct ListNode* removeElements(struct ListNode* head, int val) { ListNode*phead; ListNode*tail; phead = tail= NULL; ListNode*pcur = head; while(pcur) { //链表为空 if(pcur->val !=val) { if(phead ==NULL) { phead = tail = pcur; } else { phead ->next =pcur; phead = phead->next; } } pcur= pcur->next; } if(phead) { phead->next=NULL; } return tail; }
代码如下:
typedef struct ListNode ListNode; struct ListNode* reverseList(struct ListNode* head) { ListNode *n1, *n2, *n3; if(head==NULL) return n2; n1 = NULL, n2 = head, n3 = n2->next; while (n2) { n2->next = n1; n1 = n2; n2 = n3; if (n3) n3 = n3->next; } return n1; }